home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / newanims < prev    next >
Text File  |  1997-01-31  |  59KB  |  4,252 lines

  1. TypeOfSplat: dc.w 0
  2. BRIGHTY: dc.l 0
  3.  
  4. BRIGHTENPOINTS:
  5.  
  6. ; d0=brightness value
  7. ; d1=XPOS
  8. ; d2=ZPOS
  9. ; d3=ROOMNUMBER
  10.  
  11.  tst.w d0
  12.  bgt DARKENPOINTS
  13.  
  14.  movem.l d0-d7/a0-a6,-(a7)
  15.  
  16.  move.l ZoneAdds,a0
  17.  move.l (a0,d3.w*4),a0
  18.  add.l LEVELDATA,a0
  19.  move.l #CurrentPointBrights,a2
  20.  move.l Points,a3
  21.  move.l ZoneBorderPts,a4
  22.  
  23.  lea ToListOfGraph(a0),a1
  24. BRIGHTPTS:
  25.  move.w (a1),d4
  26.  blt brightall
  27.  
  28.  move.l ZoneAdds,a0
  29.  move.l (a0,d4.w*4),a0
  30.  add.l LEVELDATA,a0
  31.  
  32.  add.w #8,a1
  33.  moveq #9,d7
  34.  
  35.  muls #20,d4
  36.  
  37.  lea (a4,d4.w),a5
  38.  move.l #CurrentPointBrights,a2
  39.  lea (a2,d4.w*4),a2
  40.  
  41. ; Do a room.
  42.  
  43. ROOMPTLOP
  44.  move.w (a5)+,d4
  45.  blt BRIGHTPTS
  46.  
  47.  move.w (a3,d4.w*4),d5
  48.  move.w 2(a3,d4.w*4),d6
  49.  sub.w d1,d5
  50.  bgt.s .okpos1
  51.  neg.w d5
  52. .okpos1
  53.  
  54.  sub.w d2,d6
  55.  bgt.s .okpos2
  56.  neg.w d6
  57. .okpos2
  58.  
  59.  add.w d6,d5
  60.  
  61.  move.l BRIGHTY,d4
  62.  cmp.l ToZoneFloor(a0),d4
  63.  bgt .noBRIGHT1
  64.  cmp.l ToZoneRoof(a0),d4
  65.  blt .noBRIGHT1
  66.  
  67.  move.w d5,d6
  68.  move.l ToZoneRoof(a0),d4 
  69.  sub.l BRIGHTY,d4
  70.  bgt.s .noBRIGHT2
  71.  neg.l d4
  72.  asr.l #7,d4
  73.  add.w d4,d6
  74.  
  75.  asr.w #5,d6
  76.  add.w d0,d6
  77.  
  78.  bge.s .noBRIGHT2
  79.  tst.w 2(a2)
  80.  bge.s .okbr2
  81.  neg.w 2(a2)
  82. .okbr2:
  83.  
  84.  add.w 2(a2),d6
  85.  cmp.w #300,d6
  86.  bge.s .notoobr2
  87.  move.w #300,d6
  88. .notoobr2:
  89.  move.w d6,2(a2)
  90.  
  91. .noBRIGHT2
  92.  
  93.  move.w d5,d6
  94.  move.l ToZoneFloor(a0),d4
  95.  sub.l BRIGHTY,d4
  96.  blt.s .noBRIGHT1
  97.  asr.l #7,d4
  98.  add.w d4,d6
  99.  
  100.  asr.w #5,d6
  101.  add.w d0,d6
  102.  
  103.  bge.s .noBRIGHT1 
  104.  tst.w (a2)
  105.  bge.s .okbr1
  106.  neg.w (a2)
  107. .okbr1:
  108.  
  109.  add.w (a2),d6
  110.  cmp.w #300,d6
  111.  bge.s .notoobr1
  112.  move.w #300,d6
  113. .notoobr1:
  114.  move.w d6,(a2)
  115.  
  116.  
  117. .noBRIGHT1
  118.  
  119.  move.l BRIGHTY,d4
  120.  cmp.l ToUpperFloor(a0),d4
  121.  bgt .noBRIGHT4
  122.  cmp.l ToUpperRoof(a0),d4
  123.  blt .noBRIGHT4
  124.  
  125.  move.w d5,d6
  126.  move.l ToUpperFloor(a0),d4
  127.  sub.l BRIGHTY,d4
  128.  blt.s .noBRIGHT3
  129.  asr.l #7,d4
  130.  add.w d4,d6
  131.  
  132.  asr.w #5,d6
  133.  add.w d0,d6
  134.  
  135.  bge.s .noBRIGHT3
  136.  tst.w 4(a2)
  137.  bge.s .okbr3
  138.  neg.w 4(a2)
  139. .okbr3:
  140.  
  141.  add.w 4(a2),d6
  142.  cmp.w #300,d6
  143.  bge.s .notoobr3
  144.  move.w #300,d6
  145. .notoobr3:
  146.  move.w d6,4(a2)
  147.  
  148.  
  149. .noBRIGHT3
  150.  
  151.  
  152.  move.w d5,d6
  153.  move.l ToUpperRoof(a0),d4
  154.  sub.l BRIGHTY,d4
  155.  bgt.s .noBRIGHT4
  156.  neg.l d4
  157.  asr.l #7,d4
  158.  add.w d4,d6
  159.  
  160.  asr.w #5,d6
  161.  add.w d0,d6
  162.  
  163.  bge.s .noBRIGHT4
  164.  tst.w 6(a2)
  165.  bge.s .okbr4
  166.  neg.w 6(a2)
  167. .okbr4:
  168.  
  169.  add.w 6(a2),d6
  170.  cmp.w #300,d6
  171.  bge.s .notoobr4
  172.  move.w #300,d6
  173. .notoobr4:
  174.  move.w d6,6(a2)
  175.  
  176. .noBRIGHT4
  177.  
  178.  addq #8,a2
  179.  
  180.  dbra d7,ROOMPTLOP
  181.  
  182.  bra BRIGHTPTS
  183.  
  184. brightall:
  185.  
  186.  movem.l (a7)+,d0-d7/a0-a6
  187.  rts
  188.  
  189.  
  190. BRIGHTENPOINTSANGLE:
  191. ; d0=brightness value
  192. ; d1=XPOS
  193. ; d2=ZPOS
  194. ; d3=ROOMNUMBER
  195. ; d4=ANGLE
  196.  
  197.  movem.l d0-d7/a0-a6,-(a7)
  198.  
  199.  move.l #SineTable,a0
  200.  lea (a0,d4.w),a6
  201.  
  202.  move.l ZoneAdds,a0
  203.  move.l (a0,d3.w*4),a0
  204.  add.l LEVELDATA,a0
  205.  move.l #CurrentPointBrights,a2
  206.  move.l Points,a3
  207.  move.l ZoneBorderPts,a4
  208.  
  209.  lea ToListOfGraph(a0),a1
  210.   
  211. BRIGHTPTSA:
  212.  move.w (a1),d4
  213.  blt brightallA
  214.  move.l ZoneAdds,a0
  215.  move.l (a0,d4.w*4),a0
  216.  add.l LEVELDATA,a0
  217.  
  218.  add.w #8,a1
  219.  moveq #9,d3
  220.  
  221.  muls #20,d4
  222.  
  223.  lea (a4,d4.w),a5
  224.  move.l #CurrentPointBrights,a2
  225.  lea (a2,d4.w*4),a2
  226.  
  227. ROOMPTLOPA
  228.  move.w (a5)+,d4
  229.  blt BRIGHTPTSA
  230.  move.w 2(a3,d4.w*4),d5
  231.  move.w (a3,d4.w*4),d4
  232.  
  233.  sub.w d1,d4
  234.  move.w d4,d6
  235.  bgt.s .okpos1
  236.  neg.w d4
  237. .okpos1
  238.  
  239.  sub.w d2,d5
  240.  move.w d5,d7
  241.  bgt.s .okpos2
  242.  neg.w d5
  243. .okpos2
  244.  
  245.  movem.l d0/d1/d2/d3/d4/d5,-(a7)
  246.  
  247.  move.w (a6),d0
  248.  move.w 2048(a6),d1
  249.  muls d7,d1
  250.  muls d6,d0
  251.  add.l d0,d1
  252.  ble BEHINDPT
  253.  move.l d1,d5
  254.  neg.l d5
  255.  add.l #30*65536,d5
  256.  bge.s .okkkkk
  257.  moveq #0,d5
  258. .okkkkk
  259.  
  260.  move.w (a6),d0
  261.  move.w 2048(a6),d1
  262. ; ext.l d0
  263. ; ext.l d1
  264. ; asl.l #6,d1
  265. ; asl.l #6,d0
  266. ; swap d0
  267. ; swap d1
  268. ; neg.w d0
  269. ; neg.w d1
  270. ; add.w d6,d0
  271. ; add.w d7,d1
  272.  
  273.  muls d0,d7
  274.  muls d1,d6
  275.  sub.l d6,d7
  276.  bgt.s .okkk
  277.  neg.l d7
  278. .okkk
  279.  
  280.  add.l d5,d7
  281.  asl.l #2,d7
  282.  swap d7
  283.  
  284.  movem.l (a7)+,d0/d1/d2/d3/d4/d5
  285.  
  286.  add.w d7,d5
  287.  add.w d4,d5
  288.  
  289.  move.l BRIGHTY,d4
  290.  cmp.l ToZoneFloor(a0),d4
  291.  bgt .noBRIGHT1
  292.  cmp.l ToZoneRoof(a0),d4
  293.  blt .noBRIGHT1
  294.  
  295.  move.w d5,d6
  296.  move.l ToZoneRoof(a0),d4
  297.  sub.l BRIGHTY,d4
  298.  bgt.s .noBRIGHT2
  299.  neg.l d4
  300.  asr.l #7,d4
  301.  add.w d4,d6
  302.  
  303.  asr.w #5,d6
  304.  add.w d0,d6
  305.  
  306.  bge.s .noBRIGHT2
  307.  tst.w 2(a2)
  308.  bge.s .okbr2
  309.  neg.w 2(a2)
  310. .okbr2:
  311.  add.w 2(a2),d6
  312.  cmp.w #300,d6
  313.  bge.s .notoobr2
  314.  move.w #300,d6
  315. .notoobr2:
  316.  move.w d6,2(a2)
  317. .noBRIGHT2
  318.  
  319.  
  320.  move.w d5,d6
  321.  move.l ToZoneFloor(a0),d4
  322.  sub.l BRIGHTY,d4
  323.  blt.s .noBRIGHT1
  324.  asr.l #7,d4
  325.  add.w d4,d6
  326.  
  327.  asr.w #5,d6
  328.  add.w d0,d6
  329.  
  330.  bge.s .noBRIGHT1 
  331.  tst.w (a2)
  332.  bge.s .okbr1
  333.  neg.w (a2)
  334. .okbr1:
  335.  add.w (a2),d6
  336.  cmp.w #300,d6
  337.  bge.s .notoobr1
  338.  move.w #300,d6
  339. .notoobr1:
  340.  move.w d6,(a2)
  341. .noBRIGHT1
  342.  
  343.  move.l BRIGHTY,d4
  344.  cmp.l ToUpperFloor(a0),d4
  345.  bgt .noBRIGHT4
  346.  cmp.l ToUpperRoof(a0),d4
  347.  blt .noBRIGHT4
  348.  
  349.  move.w d5,d6
  350.  move.l ToUpperFloor(a0),d4
  351.  sub.l BRIGHTY,d4
  352.  blt.s .noBRIGHT3
  353.  
  354.  asr.l #7,d4
  355.  add.w d4,d6
  356.  
  357.  asr.w #5,d6
  358.  add.w d0,d6
  359.  
  360.  bge.s .noBRIGHT3
  361.  tst.w 4(a2)
  362.  bge.s .okbr3
  363.  neg.w 4(a2)
  364. .okbr3:
  365.  add.w 4(a2),d6
  366.  cmp.w #300,d6
  367.  bge.s .notoobr3
  368.  move.w #300,d6
  369. .notoobr3:
  370.  move.w d6,4(a2)
  371. .noBRIGHT3
  372.  
  373.  
  374.  move.w d5,d6
  375.  move.l ToUpperRoof(a0),d4
  376.  sub.l BRIGHTY,d4
  377.  bgt.s .noBRIGHT4
  378.  neg.l d4
  379.  asr.l #7,d4
  380.  add.w d4,d6
  381.  
  382.  asr.w #5,d6
  383.  add.w d0,d6
  384.  
  385.  bge.s .noBRIGHT4
  386.  tst.w 6(a2)
  387.  bge.s .okbr4
  388.  neg.w 6(a2)
  389. .okbr4:
  390.  add.w 6(a2),d6
  391.  cmp.w #300,d6
  392.  bge.s .notoobr4
  393.  move.w #300,d6
  394. .notoobr4:
  395.  move.w d6,6(a2)
  396. .noBRIGHT4
  397.  
  398.  addq #8,a2
  399.  
  400.  dbra d3,ROOMPTLOPA
  401.  
  402.  bra BRIGHTPTS
  403.  
  404. BEHINDPT:
  405.  movem.l (a7)+,d0/d1/d2/d3/d4/d5
  406.  addq #8,a2
  407.  
  408.  dbra d7,ROOMPTLOPA
  409.  
  410.  bra BRIGHTPTSA 
  411.  
  412. brightallA:
  413.  
  414.  movem.l (a7)+,d0-d7/a0-a6
  415.  rts
  416.  
  417. DARKENPOINTS
  418.  movem.l d0-d7/a0-a6,-(a7)
  419.  
  420.  move.l ZoneAdds,a0
  421.  move.l (a0,d3.w*4),a0
  422.  add.l LEVELDATA,a0
  423.  move.l #CurrentPointBrights,a2
  424.  move.l Points,a3
  425.  
  426.  move.l a0,a1
  427.  add.w ToZonePts(a0),a1
  428. DARKPTS:
  429.  move.w (a1)+,d4
  430.  blt.s DARKall
  431.  move.w (a3,d4.w*4),d5
  432.  move.w 2(a3,d4.w*4),d6
  433.  sub.w d1,d5
  434.  bgt.s .okpos1
  435.  neg.w d5
  436. .okpos1
  437.  
  438.  sub.w d2,d6
  439.  bgt.s .okpos2
  440.  neg.w d6
  441. .okpos2
  442.  
  443.  add.w d5,d6
  444.  asr.w #5,d6
  445.  add.w d0,d6
  446.  ble.s DARKPTS
  447.  
  448.  add.w d6,(a2,d4.w*4)
  449.  add.w d6,2(a2,d4.w*4)
  450.  bra.s DARKPTS
  451.  
  452. DARKall:
  453.  
  454.  movem.l (a7)+,d0-d7/a0-a6
  455.  rts
  456.  
  457. Flash:
  458.  
  459. ; D0=number of a zone, D1=brightness change
  460.  
  461.  cmp.w #-20,d1
  462.  bgt.s .okflash
  463.  move.w #-20,d1
  464. .okflash:
  465.  
  466.  movem.l d0/a0/a1,-(a7)
  467.  
  468.  move.l #CurrentPointBrights,a1
  469.  
  470.  move.l ZoneAdds,a0
  471.  move.l (a0,d0.w*4),a0
  472.  add.l LEVELDATA,a0
  473.  
  474.  move.l a0,-(a7)
  475.  
  476.  add.w ToZonePts(a0),a0
  477. flashpts:
  478.  move.w (a0)+,d2
  479.  blt.s flashedall
  480.  add.w d1,(a1,d2.w*4)
  481.  add.w d1,2(a1,d2.w*4)
  482.  bra flashpts
  483.  
  484. flashedall:
  485.  move.l (a7)+,a0
  486.  
  487.  move.l #ZoneBrightTable,a1
  488.  add.w d1,(a1,d0.w*4)
  489.  add.w d1,2(a1,d0.w*4)
  490.  
  491.  add.l #ToListOfGraph,a0
  492.  
  493. doemall:
  494.  move.w (a0),d0
  495.  blt.s doneemall
  496.  add.w d1,(a1,d0.w*4)
  497.  add.w d1,2(a1,d0.w*4)
  498.  addq #8,a0
  499.  bra.s doemall
  500.  
  501. doneemall:
  502.  movem.l (a7)+,d0/a0/a1
  503.  
  504.  rts
  505.  
  506. prot2: dc.w 0
  507.  
  508. radius: dc.w 0
  509.  
  510. ExplodeIntoBits:
  511.  
  512.  move.w d3,radius
  513.  
  514.  cmp.w #7,d2
  515.  ble.s .oksplut
  516.  move.w #7,d2
  517. .oksplut:
  518.  
  519.  move.l NastyShotData,a5
  520.  move.w #19,d1
  521. .findeight
  522.  move.w 12(a5),d0
  523.  blt.s .gotonehere
  524.  adda.w #64,a5
  525.  dbra d1,.findeight
  526.  rts
  527.  
  528. .gotonehere
  529.  
  530.  move.b #0,shotpower(a5)
  531.  
  532.  
  533.  move.l ObjectPoints,a2
  534.  move.w (a5),d3
  535.  lea (a2,d3.w*8),a2
  536. ; jsr GetRand
  537. ; lsr.w #4,d0
  538. ; move.w radius,d1
  539. ; and.w d1,d0
  540. ; asr.w #1,d1
  541. ; sub.w d1,d0
  542.  move.w newx,d0
  543.  move.w d0,(a2)
  544. ; jsr GetRand
  545. ; lsr.w #4,d0
  546. ; move.w radius,d1
  547. ; and.w d1,d0
  548. ; asr.w #1,d1
  549. ; sub.w d1,d0
  550.  move.w newz,d0
  551.  move.w d0,4(a2)
  552.  
  553.  move.b #2,16(a2)
  554.  
  555.  jsr GetRand
  556.  and.w #8190,d0
  557.  move.l #SineTable,a2
  558.  adda.w d0,a2
  559.  move.w (a2),d3
  560.  move.w 2048(a2),d4
  561.  Jsr GetRand
  562.  and.w #3,d0
  563.  add.w #1,d0
  564.  ext.l d3
  565.  ext.l d4
  566.  asl.l d0,d3
  567.  asl.l d0,d4
  568.  move.l ImpactX(a0),d0
  569.  swap d4
  570.  asr.w #1,d0
  571.  add.w d0,d4
  572.  swap d0
  573.  move.w d4,shotzvel(a5)
  574.  swap d3
  575.  asr.w #1,d0
  576.  add.w d0,d3
  577.  move.w d3,shotxvel(a5)
  578.  jsr GetRand
  579.  and.w #1023,d0
  580.  add.w #2*128,d0
  581.  neg.w d0
  582.  move.w d0,shotyvel(a5)
  583.  move.l #0,EnemyFlags(a5)
  584.  move.w 12(a0),12(a5)
  585.  
  586. ; jsr GetRand
  587. ; lsr.w #4,d0
  588. ; move.w radius,d1
  589. ; and.w d1,d0
  590. ; asr.w #1,d1
  591. ; sub.w d1,d0
  592.  move.w 4(a0),d0
  593.  move.w d0,4(a5)
  594.  add.w #6,d0
  595.  ext.l d0
  596.  asl.l #7,d0
  597.  
  598.  move.l d0,accypos(a5)
  599. ; move.w d2,d0
  600. ; and.w #3,d0
  601. ; add.w #50,d0
  602.  move.b TypeOfSplat,shotsize(a5)
  603. ; move.w #40,shotgrav(a5)
  604.  move.w #0,shotflags(a5)
  605.  move.w #0,shotlife(a5)
  606.  clr.b shotstatus(a5)
  607.  move.b ObjInTop(a0),ObjInTop(a5)
  608.  st worry(a5)
  609.  adda.w #64,a5
  610.  sub.w #1,d2
  611.  blt.s .gotemall
  612.  dbra d1,.findeight
  613.  
  614. .gotemall
  615.  
  616.  rts
  617.  
  618. brightanim:
  619.  
  620.  move.l #BrightAnimTable,a1
  621.  move.l #BrightAnimPtrs,a3
  622.  move.l #BrightAnimStarts,a4
  623. dobrightanims
  624.  move.l (a3),d0
  625.  blt nomoreanims
  626.  move.l d0,a2
  627.  move.w (a2)+,d0
  628.  cmp.w #999,d0
  629.  bne.s itsabright
  630.  move.l (a4),a2
  631.  move.w (a2)+,d0
  632. itsabright:
  633.  move.l a2,(a3)+
  634.  addq #4,a4
  635.  move.w d0,(a1)+
  636.  bra.s dobrightanims
  637.  
  638. nomoreanims:
  639.  rts
  640.  
  641. BrightAnimTable: ds.w 20
  642. BrightAnimPtrs:
  643.  dc.l PulseANIM1
  644.  dc.l PulseANIM2
  645.  dc.l PulseANIM3
  646.  dc.l PulseANIM4
  647.  dc.l PulseANIM5
  648.  dc.l FlickerANIM
  649.  dc.l FireFlickerANIM
  650.  dc.l -1
  651.  
  652. BrightAnimStarts:
  653.  dc.l PulseANIM1
  654.  dc.l PulseANIM2
  655.  dc.l PulseANIM3
  656.  dc.l PulseANIM4
  657.  dc.l PulseANIM5
  658.  dc.l FlickerANIM
  659.  dc.l FireFlickerANIM
  660.  
  661. PulseANIM1:
  662.  dc.w 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
  663.  dc.w 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
  664.  dc.w 999
  665.  
  666. PulseANIM2:
  667.  dc.w 9,10,11,12,13,14,15,16,17,18,19,20
  668.  dc.w 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
  669.  dc.w 1,2,3,4,5,6,7,8
  670.  dc.w 999
  671.  
  672. PulseANIM3:
  673.  dc.w 17,18,19,20
  674.  dc.w 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
  675.  dc.w 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
  676.  dc.w 999
  677.  
  678.  
  679. PulseANIM4:
  680.  
  681.  dc.w 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
  682.  dc.w 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20,19,18,17
  683.  
  684.  dc.w 999
  685.  
  686. PulseANIM5:
  687.  
  688.  dc.w 8,7,6,5,4,3,2,1
  689.  dc.w 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20,19,18,17,16,15,14,13,12,11,10,9
  690.  dc.w 999
  691.  
  692.  
  693. FlickerANIM:
  694.  dcb.w 20,20
  695.  dc.w 1
  696.  dcb.w 30,20
  697.  dc.w 1
  698.  dcb.w 5,20
  699.  dc.w 1
  700.  dc.w 999
  701.  
  702. FireFlickerANIM:
  703.  dc.w -10,-9,-6,-10,-6,-5,-5,-7,-5,-10,-9,-8,-7,-5,-5,-5,-5
  704.  dc.w -5,-5,-5,-5,-6,-7,-8,-9,-5,-10,-9,-10,-6,-5,-5,-5,-5,-5
  705.  dc.w -5,-5
  706.  dc.w 999
  707.  
  708. realtab:
  709.  dc.l prot1-78935450
  710.  dc.l prot2-78935450
  711.  dc.l prot3-78935450
  712.  dc.l prot4-78935450
  713.  dc.l prot5-78935450
  714.  dc.l prot6-78935450
  715.  dc.l prot7-78935450
  716.  dc.l prot8-78935450
  717.  dc.l prot9-78935450
  718.  dc.l protA-78935450
  719.  
  720. objvels: ds.l 8
  721.  
  722. FramesToDraw: dc.w 0
  723. TempFrames: dc.w 0
  724.  
  725. objmoveanim:
  726.  
  727.  move.l PLR1_Roompt,a0
  728.  move.w (a0),PLR1_Zone
  729.  move.l PLR2_Roompt,a0
  730.  move.w (a0),PLR2_Zone
  731.  
  732.  move.w #0,PLAYERONENOISEVOL
  733.  move.w #0,PLAYERTWONOISEVOL
  734.  
  735.  bsr Player1Shot
  736.  bsr Player2Shot
  737. ; bsr SwitchRoutine
  738.  bsr ObjectHandler
  739.  bsr DoorRoutine
  740.  
  741.  move.w #0,PLR1_FloorSpd
  742.  move.w #0,PLR2_FloorSpd
  743.  
  744.  bsr LiftRoutine
  745.  bsr brightanim
  746.  
  747.  subq.w #1,animtimer
  748.  bgt.s notzero
  749.  move.w #2,animtimer
  750.  move.l otherrip,d0
  751.  move.l RipTear,otherrip
  752.  move.l d0,RipTear
  753. notzero:
  754.  
  755.  rts
  756.  
  757. ******************************
  758.  
  759. tstdir: dc.w 0
  760.  
  761. liftheighttab: ds.w 40
  762. doorheighttab: ds.w 40
  763. PLR1_stoodonlift: dc.b 0
  764. PLR2_stoodonlift: dc.b 0
  765. liftattop: dc.b 0
  766. liftatbot: dc.b 0
  767.  
  768.  
  769. DoorLocks: dc.w 0
  770. LiftLocks: dc.w 0
  771.  
  772. ZoneBrightTable:
  773.  ds.l 300
  774.  
  775. DoWaterAnims:
  776.  
  777.  move.w #20,d0
  778. wateranimlop:
  779.  move.l (a0)+,d1
  780.  move.l (a0)+,d2
  781.  move.l (a0),d3
  782.  move.w 4(a0),d4
  783.  move.w d4,d5
  784.  muls TempFrames,d5
  785.  add.l d5,d3
  786.  cmp.l d1,d3
  787.  bgt.s waternotattop
  788.  
  789.  move.l d1,d3
  790.  move.w #128,d4
  791.  bra waterdone
  792.  
  793. waternotattop:
  794.  
  795.  cmp.l d2,d3
  796.  blt.s waterdone
  797.  
  798.  move.l d2,d3
  799.  move.w #-128,d4
  800.  
  801. waterdone:
  802.  
  803.  move.l d3,(a0)+
  804.  move.w d4,(a0)+
  805.  move.l d3,d1
  806. morezones:
  807.  move.w (a0)+,d2
  808.  bge.s okzone
  809.  
  810.  
  811.  dbra d0,wateranimlop
  812.  rts
  813.  
  814. okzone:
  815.  
  816.  move.l (a0)+,a1
  817.  add.l LEVELGRAPHICS,a1
  818.  move.l d1,d3
  819.  asr.l #6,d3
  820.  move.w d3,2(a1)
  821.  move.l ZoneAdds,a1
  822.  move.l (a1,d2.w*4),a1
  823.  add.l LEVELDATA,a1
  824.  move.l d1,ToZoneWater(a1)
  825.  
  826.  bra.s morezones
  827.  
  828.  rts
  829.  
  830. FLOORMOVESPD: dc.w 0
  831.  
  832.  even
  833. LiftRoutine:
  834.  
  835.  move.w #-1,ThisDoor
  836.  move.l LiftData,a0
  837.  move.l #liftheighttab,a6
  838.  
  839. doalift:
  840.  add.w #1,ThisDoor
  841.  move.w (a0)+,d0    ; bottom of lift movement
  842.  cmp.w #999,d0
  843.  bne notallliftsdone
  844.  move.w #999,(a6)
  845.  
  846.  move.w #0,LiftLocks
  847.  
  848.  bsr DoWaterAnims
  849.  
  850.  rts
  851.  
  852. notallliftsdone:
  853.  move.w (a0)+,d1    ; top of lift movement.
  854.  
  855.  move.w (a0)+,OPENINGSPEED
  856.  neg.w OPENINGSPEED
  857.  move.w (a0)+,CLOSINGSPEED
  858.  move.w (a0)+,STAYOPENFOR
  859.  move.w (a0)+,OPENINGSFX
  860.  move.w (a0)+,CLOSINGSFX
  861.  move.w (a0)+,OPENSFX
  862.  move.w (a0)+,CLOSEDSFX
  863.  subq.w #1,OPENINGSFX
  864.  subq.w #1,CLOSINGSFX
  865.  subq.w #1,OPENSFX
  866.  subq.w #1,CLOSEDSFX
  867.  move.w (a0)+,d2
  868.  move.w (a0)+,d3
  869.  sub.w p1_xoff,d2
  870.  sub.w p1_zoff,d3
  871.  move.w cosval,d4
  872.  move.w sinval,d5
  873.  
  874.  muls d2,d4
  875.  muls d3,d5
  876.  sub.l d5,d4
  877.  add.l d4,d4
  878.  swap d4
  879.  move.w d4,Noisex
  880.  
  881.  move.w sinval,d4
  882.  move.w cosval,d5
  883.  
  884.  muls d2,d4
  885.  muls d3,d5
  886.  sub.l d5,d4
  887.  add.l d4,d4
  888.  swap d4
  889.  move.w d4,Noisez
  890.    
  891.  move.w (a0),d3
  892.  move.w d3,(a6)+
  893.  move.w 2(a0),d2
  894.  move.w d2,d7    ; speed of movement.
  895.  
  896.  move.w d2,FLOORMOVESPD
  897.  
  898.  muls TempFrames,d2
  899.  add.w d2,d3
  900.  move.w d7,d2
  901.  cmp.w d3,d0
  902.  sle.s liftatbot
  903.  bgt.s .nolower
  904.  
  905.  tst.w d2
  906.  beq.s .nonoise3
  907.  move.w #50,Noisevol
  908.  move.w CLOSEDSFX,Samplenum
  909.  blt.s .nonoise3
  910.  move.b #1,chanpick
  911.  clr.b notifplaying
  912.  move.b #$fd,IDNUM
  913.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  914.  jsr MakeSomeNoise
  915.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  916. .nonoise3:
  917.   
  918.  moveq #0,d2
  919.  move.w d0,d3
  920. .nolower:
  921.  
  922.  cmp.w d3,d1
  923.  sge.s liftattop
  924.  blt.s .noraise
  925.  
  926.  tst.w d2
  927.  beq.s .nonoise
  928.  move.w #0,(a6)
  929.  move.w #50,Noisevol
  930.  move.w OPENSFX,Samplenum
  931.  blt.s .nonoise
  932.  move.b #1,chanpick
  933.  clr.b notifplaying
  934.  move.b #$fd,IDNUM
  935.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  936.  jsr MakeSomeNoise
  937.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  938. .nonoise
  939.  
  940.  moveq #0,d2
  941.  move.w d1,d3
  942. .noraise:
  943.  
  944.  sub.w d3,d0
  945.  cmp.w #15*16,d0
  946.  slt d6
  947.  
  948.  move.w d3,(a0)+
  949.  move.l a0,a5
  950.  move.w d2,(a0)+
  951.  move.w d2,d7
  952.  
  953.  move.l (a0)+,a1
  954.  add.l LEVELGRAPHICS,a1
  955.  asr.w #2,d3
  956.  move.w d3,d0
  957.  asl.w #2,d0
  958.  move.w d0,2(a1)
  959.  move.w d3,d0
  960.  muls #256,d3
  961.  move.w (a0)+,d5
  962.  
  963.  move.l ZoneAdds,a1
  964.  move.l (a1,d5.w*4),a1
  965.  add.l LEVELDATA,a1
  966.  move.w (a1),d5
  967.  move.l PLR1_Roompt,a3
  968.  move.l d3,2(a1)
  969.  neg.w d0
  970.  
  971.  cmp.w (a3),d5
  972.  seq.s PLR1_stoodonlift
  973.  bne.s .nosetfloorspd1
  974.  
  975.  move.w FLOORMOVESPD,PLR1_FloorSpd
  976.  
  977. .nosetfloorspd1:
  978.  
  979.  move.l PLR2_Roompt,a3
  980.  cmp.w (a3),d5
  981.  seq.s PLR2_stoodonlift
  982.  bne.s .nosetfloorspd2
  983.  
  984.  move.w FLOORMOVESPD,PLR2_FloorSpd
  985.  
  986. .nosetfloorspd2:
  987.  
  988.  move.w (a0)+,d2    ; conditions
  989. ; and.w Conditions,d2
  990. ; cmp.w -2(a0),d2
  991.  move.w ThisDoor,d2
  992.  move.w LiftLocks,d5
  993.  btst d2,d5
  994.  beq.s .satisfied 
  995.  
  996.  move.w (a0)+,d5
  997.  
  998. .dothesimplething:
  999.  move.l FloorLines,a3
  1000. .simplecheck:
  1001.  move.w (a0)+,d5
  1002.  blt nomoreliftwalls
  1003.  asl.w #4,d5
  1004.  lea (a3,d5.w),a4
  1005.  move.w #0,14(a4)
  1006.  move.l (a0)+,a1
  1007.  add.l LEVELGRAPHICS,a1
  1008.  move.l (a0)+,a2
  1009.  adda.w d0,a2
  1010.  move.l a2,10(a1)
  1011.  move.l d3,20(a1)
  1012.  bra.s .simplecheck
  1013.  bra nomoreliftwalls 
  1014.  
  1015. .satisfied:
  1016.  
  1017.  move.l FloorLines,a3
  1018.  moveq #0,d4
  1019.  moveq #0,d5
  1020.  move.b (a0)+,d4
  1021.  move.b (a0)+,d5
  1022.  tst.b liftattop
  1023.  bne tstliftlower
  1024.  tst.b liftatbot
  1025.  bne tstliftraise
  1026.  move.w #0,d1
  1027.  
  1028. backfromlift
  1029.  
  1030.  and.w #255,d0
  1031.  
  1032. liftwalls:
  1033.  move.w (a0)+,d5
  1034.  blt nomoreliftwalls
  1035.  
  1036.  asl.w #4,d5
  1037.  lea (a3,d5.w),a4
  1038.  move.w 14(a4),d4
  1039.  move.w #$8000,14(a4)
  1040.  and.w d1,d4
  1041.  beq.s .nothinghit
  1042.  move.w d7,(a5)
  1043.  move.w #50,Noisevol
  1044.  move.w ACTIONNOISE,Samplenum
  1045.  blt.s .nothinghit
  1046.  move.b #1,chanpick
  1047.  st notifplaying
  1048.  move.b #$fe,IDNUM
  1049.  movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
  1050.  jsr MakeSomeNoise
  1051.  movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
  1052. .nothinghit:
  1053.  move.l (a0)+,a1
  1054.  add.l LEVELGRAPHICS,a1
  1055.  move.l (a0)+,a2
  1056.  adda.w d0,a2
  1057.  move.l a2,10(a1)
  1058.  move.l d3,20(a1)
  1059.  bra liftwalls
  1060.  
  1061. nomoreliftwalls 
  1062.  bra doalift
  1063.  
  1064.  rts
  1065.  
  1066. tstliftlower:
  1067.  move.w CLOSINGSFX,ACTIONNOISE
  1068.  cmp.b #1,d5
  1069.  blt.s lift0
  1070.  beq.s lift1
  1071.  cmp.b #3,d5
  1072.  blt.s lift2
  1073.  beq.s lift3
  1074.  
  1075. lift0:
  1076.  
  1077.  moveq #0,d1
  1078.  tst.b p1_spctap
  1079.  beq.s .noplr1
  1080.  move.w #%100000000,d1
  1081.  move.w CLOSINGSPEED,d7
  1082.  tst.b PLR1_stoodonlift
  1083.  beq.s .noplr1
  1084.  move.w #$8000,d1
  1085.  bra backfromlift
  1086.  
  1087. .noplr1:
  1088.  tst.b p2_spctap
  1089.  beq.s .noplr2
  1090.  or.w #%100000000000,d1
  1091.  move.w CLOSINGSPEED,d7
  1092.  tst.b PLR2_stoodonlift
  1093.  beq.s .noplr2
  1094.  move.w #$8000,d1
  1095.  bra backfromlift
  1096.  
  1097. .noplr2:
  1098.  bra backfromlift
  1099.  
  1100. lift1:
  1101.  move.w CLOSINGSPEED,d7
  1102.  tst.b PLR1_stoodonlift
  1103.  bne.s lift1b
  1104.  tst.b PLR2_stoodonlift
  1105.  bne.s lift1b
  1106.  move.w #%100100000000,d1
  1107.  bra backfromlift
  1108. lift1b:
  1109.  move.w #$8000,d1
  1110.  bra backfromlift
  1111.  
  1112. lift2:
  1113.  move.w #$8000,d1
  1114.  move.w CLOSINGSPEED,d7
  1115.  bra backfromlift
  1116.  
  1117. lift3:
  1118.  move.w #$0,d1
  1119.  bra backfromlift
  1120.  
  1121. tstliftraise:
  1122.  move.w OPENINGSFX,ACTIONNOISE
  1123.  cmp.b #1,d4
  1124.  blt.s rlift0
  1125.  beq.s rlift1
  1126.  cmp.b #3,d4
  1127.  blt.s rlift2
  1128.  beq.s rlift3
  1129.  
  1130. rlift0:
  1131.  
  1132.  moveq #0,d1
  1133.  tst.b p1_spctap
  1134.  beq.s .noplr1
  1135.  move.w #%100000000,d1
  1136.  move.w OPENINGSPEED,d7
  1137.  tst.b PLR1_stoodonlift
  1138.  beq.s .noplr1
  1139.  move.w #$8000,d1
  1140.  bra backfromlift
  1141.  
  1142. .noplr1:
  1143.  tst.b p2_spctap
  1144.  beq.s .noplr2
  1145.  or.w #%100000000000,d1
  1146.  move.w OPENINGSPEED,d7
  1147.  tst.b PLR2_stoodonlift
  1148.  beq.s .noplr2
  1149.  move.w #$8000,d1
  1150.  bra backfromlift
  1151.  
  1152. .noplr2:
  1153.  
  1154.  bra backfromlift
  1155.  
  1156. rlift1:
  1157.  move.w OPENINGSPEED,d7
  1158.  tst.b PLR1_stoodonlift
  1159.  bne.s rlift1b
  1160.  tst.b PLR2_stoodonlift
  1161.  bne.s rlift1b
  1162.  move.w #%100100000000,d1
  1163.  bra backfromlift
  1164. rlift1b:
  1165.  move.w #$8000,d1
  1166.  bra backfromlift
  1167.  
  1168. rlift2:
  1169.  move.w #$8000,d1
  1170.  move.w OPENINGSPEED,d7
  1171.  bra backfromlift
  1172.  
  1173. rlift3:
  1174.  move.w #$0,d1
  1175.  bra backfromlift
  1176.  
  1177.  
  1178. animtimer: dc.w 2
  1179.  
  1180.  
  1181. doordir: dc.w -1
  1182. doorpos: dc.w -9
  1183. dooropen: dc.b 0
  1184. doorclosed: dc.b 0 
  1185. ThisDoor: dc.w 0
  1186. OPENINGSPEED: dc.w 0
  1187. CLOSINGSPEED: dc.w 0
  1188. STAYOPENFOR: dc.w 0
  1189. OPENINGSFX: dc.w 0
  1190. CLOSINGSFX: dc.w 0
  1191. OPENSFX: dc.w 0
  1192. CLOSEDSFX: dc.w 0
  1193.  
  1194.  even 
  1195.  DoorRoutine:
  1196.  
  1197.  move.l #doorheighttab,a6
  1198.  move.l DoorData,a0
  1199.  move.w #-1,ThisDoor
  1200.  
  1201. doadoor:
  1202.  
  1203.  add.w #1,ThisDoor
  1204.  move.w (a0)+,d0    ; bottom of door movement
  1205.  cmp.w #999,d0
  1206.  bne notalldoorsdone
  1207.  move.w #999,(a6)
  1208.  move.w #0,DoorLocks
  1209.  rts
  1210. notalldoorsdone:
  1211.  move.w (a0)+,d1    ; top of door movement.
  1212.  
  1213.  move.w (a0)+,OPENINGSPEED
  1214.  neg.w OPENINGSPEED
  1215.  move.w (a0)+,CLOSINGSPEED
  1216.  move.w (a0)+,STAYOPENFOR
  1217.  move.w (a0)+,OPENINGSFX
  1218.  move.w (a0)+,CLOSINGSFX
  1219.  move.w (a0)+,OPENSFX
  1220.  move.w (a0)+,CLOSEDSFX
  1221.  subq.w #1,OPENINGSFX
  1222.  subq.w #1,CLOSINGSFX
  1223.  subq.w #1,OPENSFX
  1224.  subq.w #1,CLOSEDSFX
  1225.  move.w (a0)+,d2
  1226.  move.w (a0)+,d3
  1227.  sub.w p1_xoff,d2
  1228.  sub.w p1_zoff,d3
  1229.  move.w cosval,d4
  1230.  move.w sinval,d5
  1231.  
  1232.  muls d2,d4
  1233.  muls d3,d5
  1234.  sub.l d5,d4
  1235.  add.l d4,d4
  1236.  swap d4
  1237.  move.w d4,Noisex
  1238.  
  1239.  move.w sinval,d4
  1240.  move.w cosval,d5
  1241.  
  1242.  muls d2,d4
  1243.  muls d3,d5
  1244.  sub.l d5,d4
  1245.  add.l d4,d4
  1246.  swap d4
  1247.  move.w d4,Noisez
  1248.  
  1249.  move.w (a0),d3
  1250.  move.w 2(a0),d2
  1251.  
  1252.  muls TempFrames,d2
  1253.  add.w d2,d3
  1254.  move.w 2(a0),d2
  1255.  cmp.w d3,d0
  1256.  sle.s doorclosed
  1257.  bgt.s nolower
  1258.  
  1259.  tst.w d2
  1260.  beq.s .nonoise
  1261.  move.w #50,Noisevol
  1262.  move.w CLOSEDSFX,Samplenum
  1263.  blt.s .nonoise
  1264.  move.b #1,chanpick
  1265.  clr.b notifplaying
  1266.  move.b #$fd,IDNUM
  1267.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  1268.  jsr MakeSomeNoise
  1269.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  1270. .nonoise 
  1271.  
  1272.  moveq #0,d2
  1273.  move.w d3,d0
  1274.  
  1275. nolower:
  1276.  
  1277.  cmp.w d3,d1
  1278.  sge.s dooropen
  1279.  blt.s noraise
  1280.  
  1281.  
  1282.  tst.w d2
  1283.  beq.s .nonoise
  1284.  move.w #0,(a6)
  1285.  move.w #50,Noisevol
  1286.  move.w OPENSFX,Samplenum
  1287.  blt.s .nonoise
  1288.  move.b #1,chanpick
  1289.  clr.b notifplaying
  1290.  move.b #$fd,IDNUM
  1291.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  1292.  jsr MakeSomeNoise
  1293.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  1294. .nonoise
  1295.  
  1296.  move.w d1,d3
  1297.  moveq #0,d2
  1298. noraise:
  1299.  
  1300. NOTMOVING:
  1301.  
  1302.  sub.w d3,d0
  1303.  cmp.w #15*16,d0
  1304.  sge d6
  1305.  
  1306.  move.w d3,(a0)+
  1307.  move.l a0,a5
  1308.  move.w d2,(a0)+
  1309.  move.w d2,d7
  1310.  
  1311.  move.l (a0)+,a1
  1312.  add.l LEVELGRAPHICS,a1
  1313.  asr.w #2,d3
  1314.  move.w d3,d0
  1315.  asl.w #2,d0
  1316.  move.w d0,2(a1)
  1317.  move.w d3,d0
  1318.  muls #256,d3
  1319.  move.l ZoneAdds,a1
  1320.  move.w (a0)+,d5
  1321.  
  1322.  
  1323.  move.l (a1,d5.w*4),a1
  1324.  add.l LEVELDATA,a1
  1325.  move.l d3,6(a1)
  1326.  neg.w d0
  1327.  and.w #255,d0
  1328. ; add.w #64,d0
  1329.  
  1330.  cmp.w PLR1_Zone,d5
  1331.  bne.s NotGoBackUp
  1332.  tst.b dooropen
  1333.  bne.s NotGoBackUp
  1334.  tst.w d2
  1335.  blt.s NotGoBackUp
  1336.  move.w #-16,d7
  1337.  move.w #$8000,d1
  1338.  move.w (a0)+,d2
  1339.  move.w (a0)+,d5
  1340.  bra backfromtst
  1341. NotGoBackUp:
  1342.  
  1343.  move.w (a0)+,d2    ; conditions
  1344. ; and.w Conditions,d2
  1345.  move.w ThisDoor,d2
  1346.  move.w DoorLocks,d5
  1347.  btst d2,d5
  1348.  beq.s satisfied 
  1349.  
  1350.  move.w (a0)+,d5
  1351.  
  1352. dothesimplething:
  1353.  move.l FloorLines,a3
  1354. simplecheck:
  1355.  move.w (a0)+,d5
  1356.  blt nomoredoorwalls
  1357.  asl.w #4,d5
  1358.  lea (a3,d5.w),a4
  1359.  move.w #0,14(a4)
  1360.  move.l (a0)+,a1
  1361.  add.l LEVELGRAPHICS,a1
  1362.  move.l (a0)+,a2
  1363.  adda.w d0,a2
  1364.  move.l a2,10(a1)
  1365.  move.l d3,24(a1)
  1366.  bra.s simplecheck
  1367.  bra nomoredoorwalls 
  1368.  
  1369.  
  1370. satisfied:
  1371.  
  1372.  moveq #0,d4
  1373.  moveq #0,d5
  1374.  move.b (a0)+,d5
  1375.  move.b (a0)+,d4
  1376.  tst.b dooropen
  1377.  bne tstdoortoclose
  1378.  tst.b doorclosed
  1379.  bne tstdoortoopen
  1380.  move.w #$0,d1
  1381.  
  1382. backfromtst:
  1383.  
  1384.  move.l FloorLines,a3
  1385.  
  1386. doorwalls:
  1387.  move.w (a0)+,d5
  1388.  blt.s nomoredoorwalls
  1389.  asl.w #4,d5
  1390.  lea (a3,d5.w),a4
  1391.  move.w 14(a4),d4
  1392.  move.w #$8000,14(a4)
  1393.  and.w d1,d4
  1394.  beq.s nothinghit
  1395.  move.w d7,(a5)
  1396.  move.w #50,Noisevol
  1397.  move.w ACTIONNOISE,Samplenum
  1398.  blt.s nothinghit
  1399.  move.b #1,chanpick
  1400.  clr.b notifplaying
  1401.  move.b #$fd,IDNUM
  1402.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  1403.  jsr MakeSomeNoise
  1404.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  1405. nothinghit:
  1406.  move.l (a0)+,a1
  1407.  add.l LEVELGRAPHICS,a1
  1408.  move.l (a0)+,a2
  1409.  adda.w d0,a2
  1410.  move.l a2,10(a1)
  1411.  move.l d3,24(a1)
  1412.  bra.s doorwalls
  1413.  
  1414. nomoredoorwalls 
  1415.  addq #2,a6
  1416.  bra doadoor
  1417.  
  1418.  rts
  1419.  
  1420. ACTIONNOISE: dc.w 0
  1421.  
  1422. tstdoortoopen:
  1423.  move.w OPENINGSFX,ACTIONNOISE
  1424.  
  1425.  cmp.w #1,d5
  1426.  blt.s door0
  1427.  beq.s door1
  1428.  cmp.w #3,d5
  1429.  blt.s door2
  1430.  beq.s door3
  1431.  cmp.w #5,d5
  1432.  blt.s door4
  1433.  beq.s door5
  1434.  
  1435. door0:
  1436.  
  1437.  move.w #$0,d1
  1438.  tst.b p1_spctap
  1439.  beq.s .noplr1
  1440.  move.w #%100000000,d1
  1441. .noplr1:
  1442.  tst.b p2_spctap
  1443.  beq.s .noplr2
  1444.  or.w #%100000000000,d1
  1445. .noplr2:
  1446.  move.w OPENINGSPEED,d7
  1447.  bra backfromtst
  1448.  
  1449. door1:
  1450.  move.w #%100100000000,d1
  1451.  move.w OPENINGSPEED,d7
  1452.  bra backfromtst
  1453.  
  1454. door2:
  1455.  move.w #%10000000000,d1
  1456.  move.w OPENINGSPEED,d7
  1457.  bra backfromtst
  1458.  
  1459. door3:
  1460.  move.w #%1000000000,d1
  1461.  move.w OPENINGSPEED,d7
  1462.  bra backfromtst
  1463.  
  1464. door4:
  1465.  move.w #$8000,d1
  1466.  move.w OPENINGSPEED,d7
  1467.  bra backfromtst
  1468.  
  1469. door5:
  1470.  move.w #$0,d1
  1471.  bra backfromtst
  1472.  
  1473. tstdoortoclose:
  1474.  move.w TempFrames,d1
  1475.  add.w (a6),d1
  1476.  move.w d1,(a6)
  1477.  cmp.w STAYOPENFOR,d1
  1478.  bge.s .oktoclose
  1479.  move.w #1,d4
  1480.  
  1481. .oktoclose:
  1482.  
  1483.  move.w CLOSINGSFX,ACTIONNOISE
  1484.  tst.w d4
  1485.  beq.s dclose0
  1486.  bra.s dclose1
  1487.  
  1488. dclose0:
  1489.  move.w CLOSINGSPEED,d7
  1490.  move.w #$8000,d1
  1491.  bra backfromtst
  1492.  
  1493. dclose1:
  1494.  move.w #$0,d1
  1495.  bra backfromtst
  1496.  
  1497. SwitchRoutine:
  1498.  
  1499.  move.l SwitchData,a0
  1500.  move.w #7,d0
  1501.  move.l Points,a1
  1502. CheckSwitches
  1503.  
  1504.  tst.b p1_spctap
  1505.  bne p1_SpaceIsPressed
  1506. backtop2
  1507.  tst.b p2_spctap
  1508.  bne p2_SpaceIsPressed
  1509. backtoend
  1510.  
  1511.  tst.b 2(a0)
  1512.  beq nobutt
  1513.  
  1514.  tst.b 10(a0)
  1515.  beq nobutt
  1516.  
  1517.  move.w TempFrames,d1
  1518.  add.w d1,d1
  1519.  add.w d1,d1
  1520.  sub.b d1,3(a0)
  1521.  bne nobutt
  1522.  
  1523.  move.b #0,10(a0)
  1524.  move.l 6(a0),a3
  1525.  add.l LEVELGRAPHICS,a3
  1526.  move.w #11,4(a3)
  1527.  move.w (a3),d3
  1528.  and.w #%00000111100,d3
  1529.  move.w d3,(a3)
  1530.  move.w #7,d3
  1531.  sub.w d0,d3
  1532.  addq #4,d3
  1533.  move.w Conditions,d4
  1534.  bclr d3,d4
  1535.  move.w d4,Conditions
  1536.  move.w #0,Noisex
  1537.  move.w #0,Noisez
  1538.  move.w #50,Noisevol
  1539.  move.w #10,Samplenum
  1540.  move.b #1,chanpick
  1541.  st notifplaying
  1542.  move.b #$fc,IDNUM
  1543.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  1544.  jsr MakeSomeNoise
  1545.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  1546.  
  1547. nobutt:
  1548.  
  1549.  adda.w #14,a0
  1550.  dbra d0,CheckSwitches
  1551.  rts
  1552.  
  1553. p1_SpaceIsPressed:
  1554.  move.w p1_xoff,d1
  1555.  move.w p1_zoff,d2
  1556.  move.w (a0),d3
  1557.  blt .NotCloseEnough
  1558.  move.w 4(a0),d3
  1559.  lea (a1,d3.w*4),a2
  1560.  move.w (a2),d3
  1561.  add.w 4(a2),d3
  1562.  asr.w #1,d3
  1563.  move.w 2(a2),d4
  1564.  add.w 6(a2),d4
  1565.  asr.w #1,d4
  1566.  sub.w d1,d3
  1567.  muls d3,d3
  1568.  sub.w d2,d4
  1569.  muls d4,d4
  1570.  add.l d3,d4
  1571.  cmp.l #60*60,d4
  1572.  bge .NotCloseEnough
  1573.  move.l 6(a0),a3
  1574.  add.l LEVELGRAPHICS,a3
  1575.  move.w #11,4(a3)
  1576.  move.w (a3),d3
  1577.  and.w #%00000111100,d3
  1578.  not.b 10(a0)
  1579.  beq.s .switchoff
  1580.  or.w #2,d3
  1581. .switchoff: 
  1582.  move.w d3,(a3)
  1583.  move.w #7,d3
  1584.  sub.w d0,d3
  1585.  addq #4,d3
  1586.  move.w Conditions,d4
  1587.  bchg d3,d4
  1588.  move.w d4,Conditions
  1589.  move.b #0,3(a0)
  1590.  move.w #0,Noisex
  1591.  move.w #0,Noisez
  1592.  move.w #50,Noisevol
  1593.  move.w #10,Samplenum
  1594.  move.b #1,chanpick
  1595.  st notifplaying
  1596.  move.b #$fc,IDNUM
  1597.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  1598.  jsr MakeSomeNoise
  1599.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  1600.  
  1601. .NotCloseEnough:
  1602.  bra backtop2
  1603.  
  1604. p2_SpaceIsPressed:
  1605.  move.w p2_xoff,d1
  1606.  move.w p2_zoff,d2
  1607.  move.w (a0),d3
  1608.  blt .NotCloseEnough
  1609.  move.w 4(a0),d3
  1610.  lea (a1,d3.w*4),a2
  1611.  move.w (a2),d3
  1612.  add.w 4(a2),d3
  1613.  asr.w #1,d3
  1614.  move.w 2(a2),d4
  1615.  add.w 6(a2),d4
  1616.  asr.w #1,d4
  1617.  sub.w d1,d3
  1618.  muls d3,d3
  1619.  sub.w d2,d4
  1620.  muls d4,d4
  1621.  add.l d3,d4
  1622.  cmp.l #60*60,d4
  1623.  bge .NotCloseEnough
  1624.  move.l 6(a0),a3
  1625.  add.l LEVELGRAPHICS,a3
  1626.  move.w #11,4(a3)
  1627.  move.w (a3),d3
  1628.  and.w #%00000111100,d3
  1629.  not.b 10(a0)
  1630.  beq.s .switchoff
  1631.  or.w #2,d3
  1632. .switchoff: 
  1633.  move.w d3,(a3)
  1634.  move.w #7,d3
  1635.  sub.w d0,d3
  1636.  addq #4,d3
  1637.  move.w Conditions,d4
  1638.  bchg d3,d4
  1639.  move.w d4,Conditions
  1640.  movem.l a0/a1/d0,-(a7)
  1641.  move.w #0,Noisex
  1642.  move.w #0,Noisez
  1643.  move.w #50,Noisevol
  1644.  move.w #10,Samplenum
  1645.  move.b #1,chanpick
  1646.  st notifplaying
  1647.  move.b #$fc,IDNUM
  1648.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  1649.  jsr MakeSomeNoise
  1650.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  1651.  
  1652.  movem.l (a7)+,a0/a1/d0
  1653.  
  1654. .NotCloseEnough:
  1655.  bra backtoend
  1656.  
  1657. prot1: dc.w 0
  1658.   
  1659. tempGotBigGun: dc.w 0 
  1660. tempGunDamage: dc.w 0
  1661. tempGunNoise: dc.w 1
  1662. tempxoff: dc.w 0
  1663. tempzoff: dc.w 0
  1664. tempRoompt: dc.l 0
  1665.  
  1666. PLR1_GotBigGun: dc.w 0
  1667. PLR1_GunDamage: dc.w 0
  1668. PLR1_GunNoise: dc.w 0
  1669. PLR2_GotBigGun: dc.w 0
  1670. PLR2_GunDamage: dc.w 0
  1671. PLR2_GunNoise: dc.w 0
  1672. bulyspd: dc.w 0 
  1673. closedist: dc.w 0
  1674.  
  1675. PLR1_ObsInLine:
  1676.  ds.b 400 
  1677. PLR2_ObsInLine:
  1678.  ds.b 400 
  1679.  
  1680. rotcount:
  1681.  dc.w 0
  1682.  
  1683. shotvels: ds.l 20
  1684.  
  1685.  include "NEWPLAYERSHOOT.s"
  1686.  
  1687. PLR1_GunFrame: dc.w 0
  1688. PLR2_GunFrame: dc.w 0
  1689. NUMZONES: dc.w 0
  1690.  
  1691. duh: dc.w 0
  1692. double: dc.w 0
  1693. ivescreamed: dc.w 0
  1694.  
  1695. ObjectHandler:
  1696.  
  1697.  move.l #ObjWork,WORKPTR
  1698.  move.l #DAMAGED,DAMAGEPTR
  1699.  
  1700.  move.l ObjectData,a0
  1701. Objectloop:
  1702.  tst.w (a0)
  1703.  blt doneallobj
  1704.  move.w 12(a0),GraphicRoom(a0)
  1705.  
  1706.  move.b 16(a0),d0
  1707.  cmp.b #1,d0
  1708.  blt JUMPALIEN
  1709.  beq JUMPOBJECT
  1710.  cmp.b #2,d0
  1711.  beq JUMPBULLET
  1712.  
  1713. doneobj:
  1714.  
  1715. dontworryyourprettyhead:
  1716.  adda.w #64,a0
  1717.  add.l #8,WORKPTR
  1718.  add.l #2,DAMAGEPTR
  1719.  bra Objectloop
  1720.  
  1721. doneallobj:
  1722.  rts
  1723.  
  1724. JUMPALIEN
  1725.  tst.w 12(a0)
  1726.  blt.s .dontworry
  1727.  
  1728.  tst.b numlives(a0)
  1729.  beq.s .nolock
  1730.  move.l DoorsHeld(a0),d0
  1731.  or.l d0,DoorLocks
  1732. .nolock
  1733.  
  1734.  tst.b worry(a0)
  1735.  beq .dontworry
  1736.  jsr ItsAnAlien
  1737.  
  1738.  tst.w 12-64(a0)
  1739.  blt.s .notanaux
  1740.  move.w 12(a0),12-64(a0)
  1741.  move.w 12(a0),GraphicRoom-64(a0)
  1742. .notanaux:
  1743.  
  1744. .dontworry
  1745.  bra doneobj
  1746.  
  1747. JUMPOBJECT
  1748.  tst.w 12(a0)
  1749.  blt.s .dontworry
  1750.  jsr ItsAnObject
  1751. .dontworry
  1752.  bra doneobj
  1753. JUMPBULLET:
  1754.  jsr ItsABullet
  1755.  bra doneobj
  1756.  
  1757. ItsAGasPipe:
  1758.  
  1759.  clr.b worry(a0)
  1760.  
  1761.  move.w TempFrames,d0
  1762.  tst.w ThirdTimer(a0)
  1763.  ble.s maybeflame
  1764.  
  1765.  sub.w d0,ThirdTimer(a0)
  1766.  move.w #5,SecTimer(a0)
  1767.  move.w #10,FourthTimer(a0)
  1768.  rts
  1769.  
  1770. maybeflame:
  1771.  
  1772.  sub.w d0,FourthTimer(a0)
  1773.  blt.s yesflame
  1774.  rts
  1775.  
  1776. yesflame:
  1777.  move.w #10,FourthTimer(a0)
  1778.  sub.w #1,SecTimer(a0)
  1779.  bgt.s notdoneflame
  1780.  
  1781.  move.w ObjTimer(a0),ThirdTimer(a0)
  1782.  
  1783. notdoneflame:
  1784.  
  1785.  cmp.w #4,SecTimer(a0)
  1786.  bne.s .nowhoosh
  1787.  
  1788.  movem.l d0-d7/a0-a6,-(a7)
  1789.  move.l #ObjRotated,a1
  1790.  move.w (a0),d0
  1791.  lea (a1,d0.w*8),a1
  1792.  move.l (a1),Noisex
  1793.  move.w #200,Noisevol
  1794.  move.w #22,Samplenum
  1795.  move.b #1,chanpick
  1796.  clr.b notifplaying
  1797.  move.b 1(a0),IDNUM
  1798.  jsr MakeSomeNoise
  1799.  movem.l (a7)+,d0-d7/a0-a6
  1800.  
  1801. .nowhoosh:
  1802.  
  1803. ; Gas pipe: facing direction is given by
  1804. ; leved (perpendicular to wall) so
  1805. ; just continuously spray out flame!
  1806.  move.l NastyShotData,a5
  1807.  move.w #19,d1
  1808. .findonefree
  1809.  move.w 12(a5),d0
  1810.  blt.s .foundonefree
  1811.  adda.w #64,a5
  1812.  dbra d1,.findonefree
  1813.  
  1814.  rts
  1815.  
  1816. .foundonefree:
  1817.  
  1818.  move.b #2,16(a5)
  1819.  move.w 12(a0),12(a5)
  1820.  move.w 4(a0),d0
  1821.  sub.w #80,d0
  1822.  move.w d0,4(a5)
  1823.  ext.l d0
  1824.  asl.l #7,d0
  1825.  move.l d0,accypos(a5)
  1826.  clr.b shotstatus(a5)
  1827.  move.w #0,shotyvel(a5)
  1828.  move.w (a0),d0
  1829.  move.w (a5),d1
  1830.  move.l ObjectPoints,a1
  1831.  move.l (a1,d0.w*8),(a1,d1.w*8)
  1832.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  1833.  move.b #3,shotsize(a5)
  1834.  move.w #0,shotflags(a5)
  1835.  move.w #0,shotgrav(a5)
  1836.  move.b #7,shotpower(a5)
  1837.  move.l #%100000100000,EnemyFlags(a5)
  1838.  move.w #0,shotanim(a5)
  1839.  move.w #0,shotlife(a5)
  1840.  move.l #SineTable,a1
  1841.  move.w Facing(a0),d0
  1842.  move.w (a1,d0.w),d1
  1843.  adda.w #2048,a1
  1844.  move.w (a1,d0.w),d2
  1845.  ext.l d1
  1846.  ext.l d2
  1847.  asl.l #4,d1
  1848.  asl.l #4,d2
  1849.  swap d1
  1850.  swap d2
  1851.  move.w d1,shotxvel(a5)
  1852.  move.w d2,shotzvel(a5)
  1853.  st worry(a5)
  1854.  
  1855.  rts
  1856.  
  1857. ; include "ab3:source/AI.s"
  1858.  
  1859. ItsABarrel:
  1860.  
  1861.  clr.b worry(a0)
  1862.  move.w 12(a0),GraphicRoom(a0)
  1863.  
  1864.  cmp.w #8,8(a0)
  1865.  bne.s notexploding
  1866.  
  1867.  add.w #$404,6(a0)
  1868.  
  1869.  move.w 10(a0),d0
  1870.  add.w #1,d0
  1871.  cmp.w #8,d0
  1872.  bne.s .notdone
  1873.  
  1874.  move.w #-1,12(a0)
  1875.  move.w #-1,GraphicRoom(a0)
  1876.  rts
  1877.  
  1878. .notdone:
  1879.  move.w d0,10(a0)
  1880.  rts
  1881.  
  1882. notexploding:
  1883.  
  1884.  move.w #$1f1f,14(a0)
  1885.  
  1886.  move.w 12(a0),d0
  1887.  move.l ZoneAdds,a1
  1888.  move.l (a1,d0.w*4),a1
  1889.  add.l LEVELDATA,a1
  1890.  move.l ToZoneFloor(a1),d0
  1891.  tst.b ObjInTop(a0)
  1892.  beq.s .okinbot
  1893.  move.l ToUpperFloor(a1),d0
  1894. .okinbot:
  1895.  asr.l #7,d0
  1896.  sub.w #60,d0
  1897.  move.w d0,4(a0)
  1898.  
  1899.  moveq #0,d2
  1900.  move.b damagetaken(a0),d2
  1901.  beq.s nodamage
  1902.  move.b #0,damagetaken(a0)
  1903.  sub.b d2,numlives(a0)
  1904.  bgt.s nodamage
  1905.  move.b #0,numlives(a0)
  1906.  
  1907.  movem.l d0-d7/a0-a6,-(a7)
  1908.  
  1909.  move.w (a0),d0
  1910.  move.l ObjectPoints,a1
  1911.  move.w (a1,d0.w*8),Viewerx
  1912.  move.w 4(a1,d0.w*8),Viewerz
  1913.  move.w #40,d0
  1914.  jsr ComputeBlast
  1915.  
  1916.  move.w (a0),d0
  1917.  move.l #ObjRotated,a1
  1918.  move.l (a1,d0.w*8),Noisex
  1919.  move.w #300,Noisevol
  1920.  move.w #15,Samplenum
  1921.  jsr MakeSomeNoise
  1922.  
  1923.  movem.l (a7)+,d0-d7/a0-a6
  1924.  move.w #8,8(a0)
  1925.  move.w #0,10(a0)
  1926.  move.w #$2020,14(a0)
  1927.  move.w #-30,2(a0)
  1928.  
  1929.  rts
  1930.  
  1931. nodamage:
  1932.  
  1933.  move.w (a0),d0
  1934.  move.l ObjectPoints,a1
  1935.  move.w (a1,d0.w*8),Viewerx
  1936.  move.w 4(a1,d0.w*8),Viewerz
  1937.  move.b ObjInTop(a0),ViewerTop
  1938.  move.b PLR1_StoodInTop,TargetTop
  1939.  move.l PLR1_Roompt,ToRoom
  1940.  
  1941.  move.w 12(a0),d0
  1942.  move.l ZoneAdds,a1
  1943.  move.l (a1,d0.w*4),a1
  1944.  add.l LEVELDATA,a1
  1945.  move.l a1,FromRoom
  1946.   
  1947.  move.w PLR1_xoff,Targetx
  1948.  move.w PLR1_zoff,Targetz
  1949.  move.l PLR1_yoff,d0
  1950.  asr.l #7,d0
  1951.  move.w d0,Targety
  1952.  move.w 4(a0),Viewery
  1953.  jsr CanItBeSeen
  1954.  
  1955.  clr.b 17(a0)
  1956.  tst.b CanSee
  1957.  beq .noseeplr1
  1958.  move.b #1,17(a0)
  1959.  
  1960. .noseeplr1:
  1961.  
  1962.  move.b PLR2_StoodInTop,TargetTop
  1963.  move.l PLR2_Roompt,ToRoom
  1964.  move.w PLR2_xoff,Targetx
  1965.  move.w PLR2_zoff,Targetz
  1966.  move.l PLR2_yoff,d0
  1967.  asr.l #7,d0
  1968.  move.w d0,Targety
  1969.  move.w 4(a0),Viewery
  1970.  jsr CanItBeSeen
  1971.  
  1972.  tst.b CanSee
  1973.  beq .noseeplr2
  1974.  or.b #2,17(a0)
  1975.  
  1976. .noseeplr2:
  1977.  
  1978.  
  1979.  rts
  1980.  
  1981.  include "ab3:CHEESESAUCE/NEWaliencontrol.s"
  1982.  
  1983. nextCPt: dc.w 0
  1984.  
  1985. RipTear: dc.l 256*17*65536
  1986. otherrip: dc.l 256*18*65536
  1987.  
  1988. ItsAMediKit:
  1989.  
  1990.  clr.b worry(a0)
  1991.  move.w 12(a0),GraphicRoom(a0)
  1992.  
  1993.  move.w 12(a0),d0
  1994.  move.l ZoneAdds,a1
  1995.  move.l (a1,d0.w*4),a1
  1996.  add.l LEVELDATA,a1
  1997.  move.l ToZoneFloor(a1),d0
  1998.  tst.b ObjInTop(a0)
  1999.  beq.s .okinbot
  2000.  move.l ToUpperFloor(a1),d0
  2001. .okinbot:
  2002.  asr.l #7,d0
  2003.  sub.w #32,d0
  2004.  move.w d0,4(a0)
  2005.  
  2006.  
  2007. HealFactor EQU 18
  2008.  
  2009.  
  2010.  cmp.w #127,PLR1_energy
  2011.  bge .NotSameZone
  2012.  
  2013.  move.b PLR1_StoodInTop,d0
  2014.  move.b ObjInTop(a0),d1
  2015.  eor.b d1,d0
  2016.  bne .NotSameZone
  2017.  
  2018.  move.w PLR1_xoff,oldx
  2019.  move.w PLR1_zoff,oldz
  2020.  move.w PLR1_Zone,d7
  2021.  
  2022.  cmp.w 12(a0),d7
  2023.  bne .NotSameZone
  2024.  move.w (a0),d0
  2025.  move.l ObjectPoints,a1
  2026.  move.w (a1,d0.w*8),newx
  2027.  move.w 4(a1,d0.w*8),newz
  2028.  move.l #100*100,d2
  2029.  jsr CheckHit
  2030.  tst.b hitwall
  2031.  beq .NotPickedUp
  2032.  
  2033.  move.l PLR1_Obj,a2
  2034.  move.w (a2),d0
  2035.  move.l #ObjRotated,a2
  2036.  move.l (a2,d0.w*8),Noisex
  2037.  move.w #50,Noisevol
  2038.  move.w #4,Samplenum
  2039.  move.b #2,chanpick
  2040.  clr.b notifplaying
  2041.  move.b 1(a0),IDNUM
  2042.  movem.l a0/a1/d2/d6/d7,-(a7)
  2043.  jsr MakeSomeNoise
  2044.  movem.l (a7)+,a0/a1/d2/d6/d7
  2045.  
  2046.  move.w #-1,12(a0)
  2047.  move.w #-1,GraphicRoom(a0)
  2048.  move.w HealFactor(a0),d0
  2049.  add.w PLR1_energy,d0
  2050.  cmp.w #127,d0
  2051.  ble.s .okokokokokok
  2052.  move.w #127,d0
  2053. .okokokokokok:
  2054.  move.w d0,PLR1_energy
  2055.  
  2056. .NotPickedUp:
  2057.  
  2058. .NotSameZone:
  2059.  
  2060. MEDIPLR2
  2061.  
  2062.  cmp.w #127,PLR2_energy
  2063.  bge .NotSameZone
  2064.  
  2065.  move.b PLR2_StoodInTop,d0
  2066.  move.b ObjInTop(a0),d1
  2067.  eor.b d1,d0
  2068.  bne .NotSameZone
  2069.  
  2070.  move.w PLR2_xoff,oldx
  2071.  move.w PLR2_zoff,oldz
  2072.  move.w PLR2_Zone,d7
  2073.  move.w 12(a0),d0
  2074.  
  2075.  cmp.w 12(a0),d7
  2076.  bne .NotSameZone
  2077.  move.w (a0),d0
  2078.  move.l ObjectPoints,a1
  2079.  move.w (a1,d0.w*8),newx
  2080.  move.w 4(a1,d0.w*8),newz
  2081.  move.l #100*100,d2
  2082.  jsr CheckHit
  2083.  tst.b hitwall
  2084.  beq .NotPickedUp
  2085.  
  2086.  move.l PLR2_Obj,a2
  2087.  move.w (a2),d0
  2088.  move.l #ObjRotated,a2
  2089.  move.l (a2,d0.w*8),Noisex
  2090.  move.w #50,Noisevol
  2091.  move.w #4,Samplenum
  2092.  move.b #2,chanpick
  2093.  clr.b notifplaying
  2094.  move.b 1(a0),IDNUM
  2095.  movem.l a0/a1/d2/d6/d7,-(a7)
  2096.  jsr MakeSomeNoise
  2097.  movem.l (a7)+,a0/a1/d2/d6/d7
  2098.  
  2099.  move.w #-1,12(a0)
  2100.  move.w #-1,GraphicRoom(a0)
  2101.  move.w HealFactor(a0),d0
  2102.  add.w PLR2_energy,d0
  2103.  cmp.w #127,d0
  2104.  ble.s .okokokokokok
  2105.  move.w #127,d0
  2106. .okokokokokok:
  2107.  move.w d0,PLR2_energy
  2108.  
  2109. .NotPickedUp:
  2110.  
  2111. .NotSameZone:
  2112.  
  2113.  
  2114.  rts
  2115.  
  2116.  
  2117. OFFSETTOGRAPH:
  2118.  dc.l (40*8)*43+10
  2119.  dc.l (40*8)*11+12
  2120.  dc.l (40*8)*11+22
  2121.  dc.l (40*8)*43+24
  2122.  
  2123. AmmoInGuns:
  2124.  dc.w 0
  2125.  dc.w 5
  2126.  dc.w 1
  2127.  dc.w 0
  2128.  dc.w 1
  2129.  dc.w 0
  2130.  dc.w 0
  2131.  dc.w 5
  2132.  
  2133. ItsAKey:
  2134.  
  2135.  move.w #$0f0f,14(a0)
  2136.  
  2137.  tst.b NASTY
  2138.  bne .yesnas
  2139.  move.w #-1,12(a0)
  2140.  rts
  2141. .yesnas:
  2142.  
  2143.  move.w 12(a0),GraphicRoom(a0)
  2144.  clr.b worry(a0)
  2145.  
  2146.  move.b PLR1_StoodInTop,d0
  2147.  move.b ObjInTop(a0),d1
  2148.  eor.b d1,d0
  2149.  bne .NotSameZone
  2150.  
  2151.  move.w PLR1_xoff,oldx
  2152.  move.w PLR1_zoff,oldz
  2153.  move.w PLR1_Zone,d7
  2154.  move.w 12(a0),d0
  2155.  move.l ZoneAdds,a1
  2156.  move.l (a1,d0.w*4),a1
  2157.  add.l LEVELDATA,a1
  2158.  move.l 2(a1),d0
  2159.  asr.l #7,d0
  2160.  sub.w #16,d0
  2161.  move.w d0,4(a0)
  2162.  cmp.w 12(a0),d7
  2163.  bne .NotSameZone
  2164.  move.w (a0),d0
  2165.  move.l ObjectPoints,a1
  2166.  move.w (a1,d0.w*8),newx
  2167.  move.w 4(a1,d0.w*8),newz
  2168.  move.l #100*100,d2
  2169.  jsr CheckHit
  2170.  tst.b hitwall
  2171.  beq .NotPickedUp
  2172.  
  2173.  move.w #0,Noisex
  2174.  move.w #0,Noisez
  2175.  move.w #50,Noisevol
  2176.  move.w #4,Samplenum
  2177.  move.b #2,chanpick
  2178.  clr.b notifplaying
  2179.  move.b 1(a0),IDNUM
  2180.  movem.l a0/a1/d2/d6/d7,-(a7)
  2181.  jsr MakeSomeNoise
  2182.  movem.l (a7)+,a0/a1/d2/d6/d7
  2183.  
  2184.  move.w #-1,12(a0)
  2185.  move.w #-1,GraphicRoom(a0)
  2186.  move.b 17(a0),d0
  2187.  or.b d0,Conditions+1
  2188.  
  2189.  move.l Panel,a2
  2190.  moveq #0,d1
  2191.  lsr.b #1,d0
  2192.  bcs.s .done
  2193.  addq #1,d1
  2194.  lsr.b #1,d0
  2195.  bcs.s .done
  2196.  addq #1,d1
  2197.  lsr.b #1,d0
  2198.  bcs.s .done
  2199.  addq #1,d1 
  2200. .done
  2201.  
  2202.  move.l #OFFSETTOGRAPH,a1
  2203.  add.l (a1,d1.w*4),a2
  2204.  move.l #PanelKeys,a1
  2205.  
  2206.  muls #6*22*8,d1
  2207.  
  2208.  adda.w d1,a1
  2209.  
  2210.  move.w #22*8-1,d0    ;lines
  2211. .lines:
  2212.  
  2213.  move.l (a1)+,d1
  2214.  or.l d1,(a2)
  2215.  move.w (a1)+,d1
  2216.  or.w d1,4(a2)
  2217.  adda.w #40,a2
  2218.  
  2219.  dbra d0,.lines
  2220.  
  2221.  
  2222. .NotPickedUp:
  2223.  
  2224. .NotSameZone:
  2225.  
  2226.  rts
  2227.  
  2228. Conditions: dc.l 0
  2229.  
  2230. ; Format of animations:
  2231. ; Size (-1 = and of anim) (w)
  2232. ; Address of Frame. (l)
  2233. ; height offset (w)
  2234.  
  2235. Bul1Anim:
  2236.  dc.w 20*256+15
  2237.  dc.w 6,8
  2238.  dc.w 0
  2239.  dc.w 17*256+17
  2240.  dc.w 6,9
  2241.  dc.w 0
  2242.  dc.w 15*256+20
  2243.  dc.w 6,10
  2244.  dc.w 0
  2245.  dc.w 17*256+17
  2246.  dc.w 6,11
  2247.  dc.w 0
  2248.  dc.l -1
  2249.  
  2250. Bul1Pop
  2251.  dc.b 25,25
  2252.  dc.w 1,6
  2253.  dc.w 0
  2254.  dc.b 25,25
  2255.  dc.w 1,7
  2256.  dc.w -4
  2257.  dc.b 25,25
  2258.  dc.w 1,8
  2259.  dc.w -4
  2260.  dc.b 25,25
  2261.  dc.w 1,9
  2262.  dc.w -4
  2263.  dc.b 25,25
  2264.  dc.w 1,10
  2265.  dc.w -4
  2266.  dc.b 25,25
  2267.  dc.w 1,11
  2268.  dc.w -4
  2269.  dc.b 25,25
  2270.  dc.w 1,12
  2271.  dc.w -4
  2272.  dc.b 25,25
  2273.  dc.w 1,13
  2274.  dc.w -4
  2275.  dc.b 25,25
  2276.  dc.w 1,14
  2277.  dc.w -4
  2278.  dc.b 25,25
  2279.  dc.w 1,15
  2280.  dc.w -4
  2281.  dc.b 25,25
  2282.  dc.w 1,16
  2283.  dc.w -4
  2284.  dc.l -1
  2285.  
  2286. Bul3Anim:
  2287.  dc.b 25,25
  2288.  dc.w 0,12
  2289.  dc.w 0
  2290.  dc.b 25,25
  2291.  dc.w 0,13
  2292.  dc.w 0
  2293.  dc.b 25,25
  2294.  dc.w 0,14
  2295.  dc.w 0
  2296.  dc.b 25,25
  2297.  dc.w 0,15
  2298.  dc.w 0
  2299.  dc.l -1
  2300.  
  2301. Bul3Pop:
  2302.  dc.l -1
  2303.  
  2304. Bul4Anim:
  2305.  dc.b 25,25
  2306.  dc.w 6,4
  2307.  dc.w 0
  2308.  dc.b 25,25
  2309.  dc.w 6,5
  2310.  dc.w 0
  2311.  dc.b 25,25
  2312.  dc.w 6,6
  2313.  dc.w 0
  2314.  dc.b 25,25
  2315.  dc.w 6,7
  2316.  dc.w 0
  2317.  dc.l -1
  2318.  
  2319. Bul4Pop:
  2320.  dc.b 20,20
  2321.  dc.w 6,4
  2322.  dc.w 0
  2323.  dc.b 15,15
  2324.  dc.w 6,5
  2325.  dc.w 0
  2326.  dc.b 10,10
  2327.  dc.w 6,6
  2328.  dc.w 0
  2329.  dc.b 5,5
  2330.  dc.w 6,7
  2331.  dc.w 0
  2332.  dc.l -1
  2333.  
  2334. Bul5Anim:
  2335.  dc.b 10,10
  2336.  dc.w 6,4
  2337.  dc.w 0
  2338.  dc.b 10,10
  2339.  dc.w 6,5
  2340.  dc.w 0
  2341.  dc.b 10,10
  2342.  dc.w 6,6
  2343.  dc.w 0
  2344.  dc.b 10,10
  2345.  dc.w 6,7
  2346.  dc.w 0
  2347.  dc.l -1
  2348.  
  2349. Bul5Pop:
  2350.  dc.b 8,8
  2351.  dc.w 6,4
  2352.  dc.w 0
  2353.  dc.b 6,6
  2354.  dc.w 6,5
  2355.  dc.w 0
  2356.  dc.b 4,4
  2357.  dc.w 6,6
  2358.  dc.w 0
  2359.  dc.l -1
  2360.  
  2361. grenAnim:
  2362.  dc.b 25,25
  2363.  dc.w 1,21
  2364.  dc.w 0
  2365.  dc.b 25,25
  2366.  dc.w 1,22
  2367.  dc.w 0
  2368.  dc.b 25,25
  2369.  dc.w 1,23
  2370.  dc.w 0
  2371.  dc.b 25,25
  2372.  dc.w 1,24
  2373.  dc.w 0
  2374.  dc.l -1
  2375.  
  2376. Bul2Anim:
  2377.  dc.b 25,25
  2378.  dc.w -18,4
  2379.  dc.w 0
  2380.  dc.b 25,25
  2381.  dc.w -18,5
  2382.  dc.w 0
  2383.  dc.b 25,25
  2384.  dc.w -18,6
  2385.  dc.w 0
  2386.  dc.b 25,25
  2387.  dc.w -18,7
  2388.  dc.w 0
  2389.  dc.b 25,25
  2390.  dc.w -18,4
  2391.  dc.w 0
  2392.  dc.b 25,25
  2393.  dc.w -18,5
  2394.  dc.w 0
  2395.  dc.b 25,25
  2396.  dc.w -18,6
  2397.  dc.w 0
  2398.  dc.b 25,25
  2399.  dc.w -18,7
  2400.  dc.w 0
  2401.  dc.w -1
  2402.  
  2403.  
  2404. Bul2Pop:
  2405.  dc.b 25,25
  2406.  dc.w 2,8
  2407.  dc.w -4
  2408.  dc.b 29,29
  2409.  dc.w 2,9
  2410.  dc.w -4
  2411.  dc.b 33,33
  2412.  dc.w 2,10
  2413.  dc.w -4
  2414.  dc.b 37,37
  2415.  dc.w 2,11
  2416.  dc.w -4
  2417.  dc.b 41,41
  2418.  dc.w 2,12
  2419.  dc.w -4
  2420.  dc.b 45,45
  2421.  dc.w 2,13
  2422.  dc.w -4
  2423.  dc.b 49,49
  2424.  dc.w 2,14
  2425.  dc.w -4
  2426.  dc.b 53,53
  2427.  dc.w 2,15
  2428.  dc.w -4
  2429.  dc.b 57,57
  2430.  dc.w 2,16
  2431.  dc.w -4
  2432.  dc.b 61,61
  2433.  dc.w 2,17
  2434.  dc.w -4
  2435.  dc.b 65,65
  2436.  dc.w 2,18
  2437.  dc.w -4
  2438.  dc.b 69,69
  2439.  dc.w 2,19
  2440.  dc.w -4
  2441.  dc.w -1
  2442.  
  2443. RockAnim:
  2444.  dc.b 16,16
  2445.  dc.w 6,0
  2446.  dc.w 0
  2447.  dc.b 16,16
  2448.  dc.w 6,1
  2449.  dc.w 0
  2450.  dc.b 16,16
  2451.  dc.w 6,2
  2452.  dc.w 0
  2453.  dc.b 16,16
  2454.  dc.w 6,3
  2455.  dc.w 0  
  2456.  dc.l -1
  2457.  
  2458. val SET 100
  2459.  
  2460. RockPop:
  2461.  dc.b val,val
  2462.  dc.w 8,0
  2463.  dc.w -4
  2464. val SET val+10 
  2465.  dc.b val,val
  2466.  dc.w 8,1
  2467.  dc.w 0
  2468. val SET val+10 
  2469.  dc.b val,val
  2470.  dc.w 8,2
  2471.  dc.w -4
  2472. val SET val+10 
  2473.  dc.b val,val
  2474.  dc.w 8,3
  2475.  dc.w -4
  2476. val SET val+10 
  2477.  dc.b val,val
  2478.  dc.w 8,4
  2479.  dc.w -4
  2480. val SET val+10 
  2481.  dc.b val,val
  2482.  dc.w 8,4
  2483.  dc.w -4
  2484. val SET val+10 
  2485.  dc.b val,val
  2486.  dc.w 8,5
  2487.  dc.w -4
  2488. val SET val+10 
  2489.  dc.b val,val
  2490.  dc.w 8,5
  2491.  dc.w -4
  2492. val SET val+10 
  2493.  dc.b val,val
  2494.  dc.w 8,6
  2495.  dc.w -4
  2496. val SET val+10 
  2497.  dc.b val,val
  2498.  dc.w 8,6
  2499.  dc.w -4
  2500. val SET val+10 
  2501.  dc.b val,val
  2502.  dc.w 8,7
  2503.  dc.w -4
  2504. val SET val+10 
  2505.  dc.b val,val
  2506.  dc.w 8,7
  2507.  dc.w -4
  2508. val SET val+10 
  2509.  dc.b val,val
  2510.  dc.w 8,8
  2511.  dc.w -4
  2512. val SET val+10 
  2513.  dc.b val,val
  2514.  dc.w 8,8
  2515.  dc.w -4
  2516.  dc.l -1
  2517.  
  2518.  
  2519. val SET 5
  2520.  
  2521. FlameAnim:
  2522.  
  2523.  dc.b val,val
  2524.  dc.w 8,0
  2525.  dc.w 0
  2526. val SET val+4 
  2527.  dc.b val,val
  2528.  dc.w 8,1
  2529.  dc.w 0
  2530. val SET val+4 
  2531.  dc.b val,val
  2532.  dc.w 8,2
  2533.  dc.w 0
  2534. val SET val+4 
  2535.  dc.b val,val
  2536.  dc.w 8,3
  2537.  dc.w 0
  2538. val SET val+4 
  2539.  dc.b val,val
  2540.  dc.w 8,4
  2541.  dc.w 0
  2542. val SET val+4 
  2543.  dc.b val,val
  2544.  dc.w 8,4
  2545.  dc.w 0
  2546. val SET val+4 
  2547.  dc.b val,val
  2548.  dc.w 8,5
  2549.  dc.w 0
  2550. val SET val+4 
  2551.  dc.b val,val
  2552.  dc.w 8,5
  2553.  dc.w 0
  2554. val SET val+4 
  2555.  dc.b val,val
  2556.  dc.w 8,5
  2557.  dc.w 0
  2558. val SET val+4 
  2559.  dc.b val,val
  2560.  dc.w 8,6
  2561.  dc.w 0
  2562. val SET val+4 
  2563.  dc.b val,val
  2564.  dc.w 8,6
  2565.  dc.w 0
  2566. val SET val+4 
  2567.  dc.b val,val
  2568.  dc.w 8,6
  2569.  dc.w 0
  2570. val SET val+6 
  2571.  dc.b val,val
  2572.  dc.w 8,7
  2573.  dc.w 0
  2574. val SET val+8 
  2575.  dc.b val,val
  2576.  dc.w 8,7
  2577.  dc.w 0
  2578. val SET val+8 
  2579.  dc.b val,val
  2580.  dc.w 8,7
  2581.  dc.w 0
  2582. val SET val+8 
  2583.  dc.b val,val
  2584.  dc.w 8,7
  2585.  dc.w 0
  2586. val SET val+8 
  2587.  dc.b val,val
  2588.  dc.w 8,8
  2589.  dc.w 0
  2590. val SET val+8 
  2591.  dc.b val,val
  2592.  dc.w 8,8
  2593.  dc.w 0
  2594. val SET val+8 
  2595.  dc.b val,val
  2596.  dc.w 8,8
  2597.  dc.w 0
  2598.  
  2599.  dc.l -1
  2600.  
  2601. FlamePop:
  2602. val SET 4*35
  2603.  dc.b val,val
  2604.  dc.w 8,7
  2605.  dc.w 0
  2606. val SET val+4 
  2607.  dc.b val,val
  2608.  dc.w 8,7
  2609.  dc.w 0
  2610. val SET val+4 
  2611.  dc.b val,val
  2612.  dc.w 8,7
  2613.  dc.w 0
  2614. val SET val+4 
  2615.  dc.b val,val
  2616.  dc.w 8,8
  2617.  dc.w 0
  2618. val SET val+4 
  2619.  dc.b val,val
  2620.  dc.w 8,8
  2621.  dc.w 0
  2622. val SET val+4 
  2623.  dc.b val,val
  2624.  dc.w 8,8
  2625.  dc.w 0
  2626.  
  2627.  dc.l -1
  2628.  
  2629. Explode1Anim: 
  2630.  dc.b 25,25
  2631.  dc.w 0,16
  2632.  dc.w 0
  2633.  dc.b 25,25
  2634.  dc.w 0,17
  2635.  dc.w 0
  2636.  dc.b 25,25
  2637.  dc.w 0,18
  2638.  dc.w 0
  2639.  dc.b 25,25
  2640.  dc.w 0,19
  2641.  dc.w 0
  2642.  dc.l -1
  2643.  
  2644. Explode1Pop:
  2645.  dc.b 20,20
  2646.  dc.w 0,16
  2647.  dc.w 1
  2648.  dc.b 20,20
  2649.  dc.w 0,16
  2650.  dc.w 1
  2651.  dc.b 20,20
  2652.  dc.w 0,16
  2653.  dc.w 1
  2654.  dc.b 20,20
  2655.  dc.w 0,16
  2656.  dc.w 1
  2657.  dc.b 20,20
  2658.  dc.w 0,16
  2659.  dc.w 1
  2660.  dc.b 20,20
  2661.  dc.w 0,16
  2662.  dc.w 1
  2663.  dc.b 20,20
  2664.  dc.w 0,16
  2665.  dc.w 1
  2666.  dc.b 20,20
  2667.  dc.w 0,16
  2668.  dc.w 1
  2669.  
  2670.  dc.b 17,17
  2671.  dc.w 0,16
  2672.  dc.w 1
  2673.  
  2674.  dc.b 13,13
  2675.  dc.w 0,16
  2676.  dc.w 1
  2677.  
  2678.  dc.b 9,9
  2679.  dc.w 0,16
  2680.  dc.w 1
  2681.  
  2682.  dc.l -1
  2683.  
  2684. Explode2Anim: 
  2685.  dc.b 20,20
  2686.  dc.w 0,20
  2687.  dc.w 0
  2688.  dc.b 20,20
  2689.  dc.w 0,21
  2690.  dc.w 0
  2691.  dc.b 20,20
  2692.  dc.w 0,22
  2693.  dc.w 0
  2694.  dc.b 20,20
  2695.  dc.w 0,23
  2696.  dc.w 0
  2697.  dc.l -1
  2698.  
  2699. Explode2Pop:
  2700.  dc.b 20,20
  2701.  dc.w 0,20
  2702.  dc.w 1
  2703.  dc.b 20,20
  2704.  dc.w 0,20
  2705.  dc.w 1
  2706.  dc.b 20,20
  2707.  dc.w 0,20
  2708.  dc.w 1
  2709.  dc.b 20,20
  2710.  dc.w 0,20
  2711.  dc.w 1
  2712.  dc.b 20,20
  2713.  dc.w 0,20
  2714.  dc.w 1
  2715.  dc.b 20,20
  2716.  dc.w 0,20
  2717.  dc.w 1
  2718.  dc.b 20,20
  2719.  dc.w 0,20
  2720.  dc.w 1
  2721.  dc.b 20,20
  2722.  dc.w 0,20
  2723.  dc.w 1
  2724.  
  2725.  dc.b 17,17
  2726.  dc.w 0,20
  2727.  dc.w 1
  2728.  
  2729.  dc.b 13,13
  2730.  dc.w 0,20
  2731.  dc.w 1
  2732.  
  2733.  dc.b 9,9
  2734.  dc.w 0,20
  2735.  dc.w 1
  2736.  
  2737.  dc.l -1
  2738.  
  2739.  
  2740. Explode3Anim: 
  2741.  dc.b 20,20
  2742.  dc.w 0,24
  2743.  dc.w 0
  2744.  dc.b 20,20
  2745.  dc.w 0,25
  2746.  dc.w 0
  2747.  dc.b 20,20
  2748.  dc.w 0,26
  2749.  dc.w 0
  2750.  dc.b 20,20
  2751.  dc.w 0,27
  2752.  dc.w 0
  2753.  dc.l -1
  2754.  
  2755. Explode3Pop:
  2756.  
  2757.  dc.b 17,17
  2758.  dc.w 0,24
  2759.  dc.w 1
  2760.  dc.b 17,17
  2761.  dc.w 0,24
  2762.  dc.w 1
  2763.  dc.b 17,17
  2764.  dc.w 0,24
  2765.  dc.w 1
  2766.  dc.b 17,17
  2767.  dc.w 0,24
  2768.  dc.w 1
  2769.  dc.b 17,17
  2770.  dc.w 0,24
  2771.  dc.w 1
  2772.  dc.b 17,17
  2773.  dc.w 0,24
  2774.  dc.w 1
  2775.  dc.b 17,17
  2776.  dc.w 0,24
  2777.  dc.w 1
  2778.  dc.b 17,17
  2779.  dc.w 0,24
  2780.  dc.w 1
  2781.  
  2782.  dc.b 13,13
  2783.  dc.w 0,24
  2784.  dc.w 1
  2785.  
  2786.  dc.b 9,9
  2787.  dc.w 0,24
  2788.  dc.w 1
  2789.  
  2790.   dc.l -1
  2791.  
  2792. Explode4Anim: 
  2793.  dc.b 30,30
  2794.  dc.w 0,28
  2795.  dc.w 0
  2796.  dc.b 30,30
  2797.  dc.w 0,29
  2798.  dc.w 0
  2799.  dc.b 30,30
  2800.  dc.w 0,30
  2801.  dc.w 0
  2802.  dc.b 30,30
  2803.  dc.w 0,31
  2804.  dc.w 0
  2805.  dc.l -1
  2806.  
  2807. Explode4Pop:
  2808.  
  2809.  dc.b 20,20
  2810.  dc.w 0,28
  2811.  dc.w 0
  2812.  dc.b 20,20
  2813.  dc.w 0,28
  2814.  dc.w 1
  2815.  dc.b 20,20
  2816.  dc.w 0,28
  2817.  dc.w 1
  2818.  dc.b 20,20
  2819.  dc.w 0,28
  2820.  dc.w 1
  2821.  dc.b 20,20
  2822.  dc.w 0,28
  2823.  dc.w 1
  2824.  dc.b 20,20
  2825.  dc.w 0,28
  2826.  dc.w 1
  2827.  dc.b 20,20
  2828.  dc.w 0,28
  2829.  dc.w 1
  2830.  dc.b 20,20
  2831.  dc.w 0,28
  2832.  dc.w 1
  2833.  
  2834.  dc.b 17,17
  2835.  dc.w 0,28
  2836.  dc.w 1
  2837.  
  2838.  dc.b 13,13
  2839.  dc.w 0,28
  2840.  dc.w 1
  2841.  
  2842.  dc.b 9,9
  2843.  dc.w 0,28
  2844.  dc.w 1
  2845.  
  2846.  dc.l -1
  2847.   
  2848. BulletSizes:
  2849.  dc.w $0f0f,$707
  2850.  dc.w $0f0f,$f0f
  2851.  dc.w $0f0f,$1f1f
  2852.  dc.w $1f1f,$1f1f
  2853.  dc.w $0707,$1f1f
  2854.  dc.w $0f0f,$0f0f
  2855.  dc.w $0f0f,$0f0f
  2856.  dc.w $707,$707
  2857.  dc.w 0,0,0,0
  2858. ;10 
  2859.  dc.w 0,0,0,0,0,0,0,0,0,0
  2860.  dc.w 0,0,0,0,0,0,0,0,0,0
  2861. ;20
  2862.  dc.w 0,0,0,0,0,0,0,0,0,0
  2863.  dc.w 0,0,0,0,0,0,0,0,0,0
  2864. ;30
  2865.  dc.w 0,0,0,0,0,0,0,0,0,0
  2866.  dc.w 0,0,0,0,0,0,0,0,0,0
  2867. ;40
  2868.  dc.w 0,0,0,0,0,0,0,0,0,0
  2869.  dc.w 0,0,0,0,0,0,0,0,0,0
  2870. ;50
  2871.  dc.w $0707,$0707,$0707,$0707
  2872.  dc.w $0707,$0707,$0707,$0707
  2873.  
  2874. HitNoises:
  2875. ; dc.l -1,-1
  2876.  dc.w 15,200
  2877.  dc.w 15,200
  2878.  dc.l -1
  2879.  dc.w 15,200
  2880.  dc.l -1,-1,-1,-1,-1
  2881.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2882.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2883.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2884.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2885.  
  2886.  dc.w 13,50,13,50,13,50,13,50
  2887.  
  2888. ExplosiveForce:
  2889.  dc.w 0,0,64,0,40,0,0,0,0,0
  2890.  dc.w 0,0,0,0,0,0,0,0,0,0
  2891.  dc.w 0,0,0,0,0,0,0,0,0,0
  2892.  dc.w 0,0,0,0,0,0,0,0,0,0
  2893.  dc.w 0,0,0,0,0,0,0,0,0,0
  2894.  dc.w 0,0,0,0
  2895.   
  2896. BulletTypes:
  2897.  dc.l Bul1Anim,Bul1Pop
  2898.  dc.l Bul2Anim,Bul2Pop
  2899.  dc.l RockAnim,RockPop
  2900.  dc.l FlameAnim,FlamePop
  2901.  dc.l grenAnim,RockPop
  2902.  dc.l Bul4Anim,Bul4Pop
  2903.  dc.l Bul5Anim,Bul5Pop
  2904.  dc.l Bul1Anim,Bul1Pop
  2905.  dc.l 0,0
  2906.  dc.l 0,0
  2907.  
  2908.  dc.l 0,0
  2909.  dc.l 0,0
  2910.  dc.l 0,0
  2911.  dc.l 0,0
  2912.  dc.l 0,0
  2913.  dc.l 0,0
  2914.  dc.l 0,0
  2915.  dc.l 0,0
  2916.  dc.l 0,0
  2917.  dc.l 0,0
  2918.  
  2919.  dc.l 0,0
  2920.  dc.l 0,0
  2921.  dc.l 0,0
  2922.  dc.l 0,0
  2923.  dc.l 0,0
  2924.  dc.l 0,0
  2925.  dc.l 0,0
  2926.  dc.l 0,0
  2927.  dc.l 0,0
  2928.  dc.l 0,0
  2929.  
  2930.  dc.l 0,0
  2931.  dc.l 0,0
  2932.  dc.l 0,0
  2933.  dc.l 0,0
  2934.  dc.l 0,0
  2935.  dc.l 0,0
  2936.  dc.l 0,0
  2937.  dc.l 0,0
  2938.  dc.l 0,0
  2939.  dc.l 0,0
  2940.  
  2941.  dc.l 0,0
  2942.  dc.l 0,0
  2943.  dc.l 0,0
  2944.  dc.l 0,0
  2945.  dc.l 0,0
  2946.  dc.l 0,0
  2947.  dc.l 0,0
  2948.  dc.l 0,0
  2949.  dc.l 0,0
  2950.  dc.l 0,0
  2951.  
  2952.  dc.l Explode1Anim,Explode1Pop
  2953.  dc.l Explode2Anim,Explode2Pop
  2954.  dc.l Explode3Anim,Explode3Pop
  2955.  dc.l Explode4Anim,Explode4Pop
  2956.  
  2957. tsta: dc.l 0
  2958. timeout: dc.w 0
  2959. BRIGHTNESS: dc.w 0
  2960.  
  2961. ItsABullet:
  2962.  
  2963.  move.b #0,timeout
  2964.  move.w 12(a0),d0
  2965.  move.w d0,GraphicRoom(a0)
  2966.  blt doneshot
  2967.  
  2968.  moveq #0,d1
  2969.  move.b shotsize(a0),d1
  2970.  muls #B_BulStatLen,d1
  2971.  move.l LINKFILE,a6
  2972.  lea BulletAnimData(a6),a6
  2973.  add.l d1,a6
  2974.  
  2975.  tst.b shotstatus(a0)
  2976.  bne.s noworrylife
  2977.  
  2978. ; a6 points at bullet data.
  2979.  
  2980.  move.w shotlife(a0),d2
  2981.  blt.s infinite
  2982.  
  2983.  move.l B_LifeTime(a6),d1
  2984.  blt.s infinite
  2985.  
  2986.  cmp.w d2,d1
  2987.  bge.s notdone
  2988.  
  2989.  st timeout
  2990.  bra.s infinite 
  2991.  
  2992. notdone:
  2993.  
  2994.  move.w TempFrames,d2
  2995.  add.w d2,shotlife(a0)
  2996.  
  2997. infinite:
  2998.  
  2999. noworrylife:
  3000.  
  3001.  move.w #0,extlen
  3002.  move.b #$ff,awayfromwall
  3003.  
  3004.  
  3005.  tst.b shotstatus(a0)
  3006.  beq notpopping
  3007.  
  3008.  lea B_StartOfPop(a6),a1
  3009.  moveq #0,d1
  3010.  move.b shotanim(a0),d1
  3011.  
  3012.  move.w d1,d2
  3013.  add.w d1,d1
  3014.  add.w d2,d1
  3015.  add.w d1,d1
  3016.  
  3017.  move.l #0,8(a0)
  3018.  
  3019.  cmp.l #1,B_ImpactGraphicType(a6)
  3020.  blt.s .bitmapgraph
  3021.  beq.s .glaregraph
  3022. .additivegraph:
  3023.  move.b (a1,d1.w),9(a0)
  3024.  move.b 1(a1,d1.w),11(a0)
  3025.  move.b #6,10(a0)
  3026.  move.w 2(a1,d1.w),6(a0)
  3027.  move.b 5(a1,d1.w),BRIGHTNESS
  3028.  
  3029.  bra.s .donegraph
  3030. .bitmapgraph:
  3031.  move.b (a1,d1.w),9(a0)
  3032.  move.b 1(a1,d1.w),11(a0)
  3033.  move.w 2(a1,d1.w),6(a0)
  3034.  move.b 5(a1,d1.w),BRIGHTNESS
  3035.  
  3036.  bra.s .donegraph
  3037. .glaregraph:
  3038.  move.b (a1,d1.w),d0
  3039.  ext.w d0
  3040.  neg.w d0
  3041.  move.w d0,8(a0)
  3042.  move.b 1(a1,d1.w),11(a0)
  3043.  move.w 2(a1,d1.w),6(a0)
  3044.  move.b 5(a1,d1.w),BRIGHTNESS
  3045.  
  3046. .donegraph:
  3047.  
  3048.  addq #1,d2
  3049.  cmp.w B_PopFrames+2(a6),d2
  3050.  ble.s notdonepopping
  3051.  
  3052.  move.w #-1,12(a0)
  3053.  move.w #-1,GraphicRoom(a0)
  3054.  clr.b shotstatus(a0)
  3055.  move.b #0,shotanim(a0)
  3056.  rts
  3057. notdonepopping:
  3058.  
  3059.  move.b d2,shotanim(a0)
  3060.  moveq #0,d0
  3061.  move.b BRIGHTNESS,d0
  3062.  beq.s .nobright
  3063.  neg.w d0
  3064.  move.w (a0),d2
  3065.  move.l ObjectPoints,a2
  3066.  move.w (a2,d2.w*8),d1
  3067.  move.w 4(a2,d2.w*8),d2
  3068.  move.w 4(a0),d3
  3069.  ext.l d3
  3070.  asl.l #7,d3
  3071.  move.l d3,BRIGHTY
  3072.  move.w 12(a0),d3
  3073.  jsr BRIGHTENPOINTS
  3074. .nobright
  3075.  rts
  3076.  
  3077. BLOODYGREATBOMB: dc.w 0
  3078.  
  3079. notpopping:
  3080.  
  3081.  move.b shotsize(a0),BLOODYGREATBOMB
  3082.  
  3083.  lea B_StartOfAnim(a6),a1
  3084.  moveq #0,d1
  3085.  move.b shotanim(a0),d1
  3086.  
  3087.  add.w d1,d1
  3088.  move.w d1,d2
  3089.  add.w d1,d1
  3090.  add.w d2,d1
  3091.  
  3092.  move.l #0,8(a0)
  3093.  
  3094.  cmp.l #1,B_GraphType(a6)
  3095.  blt.s .bitmapgraph
  3096.  beq.s .glaregraph
  3097. .additivegraph:
  3098.  move.b (a1,d1.w),9(a0)
  3099.  move.b 1(a1,d1.w),11(a0)
  3100.  move.b #6,10(a0)
  3101.  move.w 2(a1,d1.w),6(a0)
  3102.  move.b 5(a1,d1.w),BRIGHTNESS
  3103.  
  3104.  bra.s .donegraph
  3105. .bitmapgraph:
  3106.  move.b (a1,d1.w),9(a0)
  3107.  move.b 1(a1,d1.w),11(a0)
  3108.  move.w 2(a1,d1.w),6(a0)
  3109.  move.b 5(a1,d1.w),BRIGHTNESS
  3110.  
  3111.  bra.s .donegraph
  3112. .glaregraph:
  3113.  move.b (a1,d1.w),d0
  3114.  ext.w d0
  3115.  neg.w d0
  3116.  move.w d0,8(a0)
  3117.  move.b 1(a1,d1.w),11(a0)
  3118.  move.w 2(a1,d1.w),6(a0)
  3119.  move.b 5(a1,d1.w),BRIGHTNESS
  3120.  
  3121. .donegraph:
  3122.  
  3123.  addq #1,d2
  3124.  cmp.w B_AnimFrames+2(a6),d2
  3125.  ble.s notdoneanim
  3126.  
  3127.  move.w #0,d2
  3128.  
  3129. notdoneanim:
  3130.  
  3131.  move.b d2,shotanim(a0)
  3132.  
  3133.  move.l ZoneAdds,a2
  3134.  move.l (a2,d0.w*4),d0
  3135.  add.l LEVELDATA,d0
  3136.  move.l d0,objroom
  3137.  
  3138. ******************************** 
  3139.  move.l objroom,a3
  3140.  
  3141.  tst.b ObjInTop(a0)
  3142.  beq.s .notintop
  3143.  adda.w #8,a3
  3144. .notintop:
  3145.  
  3146.  move.l 6(a3),d0
  3147.  sub.l accypos(a0),d0
  3148.  cmp.l #10*128,d0
  3149.  blt .nohitroof 
  3150.  
  3151.  btst #0,shotflags+1(a0)
  3152.  beq.s .nobounce
  3153.  
  3154.  neg.w shotyvel(a0)
  3155.  
  3156.  move.l 6(a3),d0
  3157.  add.l #10*128,d0
  3158.  move.l d0,accypos(a0)
  3159.  
  3160. ; btst #1,shotflags+1(a0)
  3161. ; beq .nohitroof
  3162.  
  3163.  move.l shotxvel(a0),d0
  3164.  asr.l #1,d0
  3165.  move.l d0,shotxvel(a0)
  3166.  move.l shotzvel(a0),d0
  3167.  asr.l #1,d0
  3168.  move.l d0,shotzvel(a0) 
  3169.  
  3170.  bra .nohitroof
  3171.  
  3172. .nobounce: 
  3173.  
  3174.  move.b #0,shotanim(a0)
  3175.  move.b #1,shotstatus(a0)
  3176.  
  3177.  move.l B_ImpactSFX(a6),d0
  3178.  subq.l #1,d0
  3179.  blt.s .nohitnoise
  3180.  
  3181.  move.l #ObjRotated,a1
  3182.  move.w (a0),d1
  3183.  move.l (a1,d1.w*8),Noisex
  3184. ; move.w d0,Noisevol
  3185. ; swap d0
  3186.  move.w #200,Noisevol
  3187.  move.w d0,Samplenum
  3188.  move.b d1,IDNUM
  3189.  movem.l d0-d7/a0-a6,-(a7)
  3190.  jsr MakeSomeNoise
  3191.  movem.l (a7)+,d0-d7/a0-a6
  3192.  
  3193. .nohitnoise:
  3194.  
  3195.  move.l B_ExplosiveForce(a6),d0
  3196.  beq.s .noexplosion
  3197.  
  3198.  move.w newx,Viewerx
  3199.  move.w newz,Viewerz
  3200.  
  3201.  move.w 4(a0),Viewery
  3202.  move.b ObjInTop(a0),ViewerTop
  3203.  
  3204.  movem.l d0-d7/a0-a6,-(a7)
  3205.  bsr ComputeBlast
  3206.  movem.l (a7)+,d0-d7/a0-a6
  3207.  
  3208. .noexplosion:
  3209.  
  3210. .nohitroof:
  3211.  
  3212.  move.l 2(a3),d0
  3213.  sub.l accypos(a0),d0
  3214.  cmp.l #10*128,d0
  3215.  bgt .nohitfloor 
  3216.  
  3217.  tst.l B_BounceOffFloors(a6)
  3218.  beq.s .nobounceup
  3219.  
  3220.  tst.w shotyvel(a0)
  3221.  blt .nohitfloor
  3222.  
  3223.  moveq #0,d0
  3224.  move.w shotyvel(a0),d0
  3225.  asr.w #1,d0
  3226.  neg.w d0
  3227.  move.w d0,shotyvel(a0)
  3228.  
  3229.  move.l 2(a3),d0
  3230.  sub.l #10*128,d0
  3231.  move.l d0,accypos(a0)
  3232.  
  3233. ; btst #1,shotflags+1(a0)
  3234. ; beq .nohitfloor
  3235.  
  3236.  move.l shotxvel(a0),d0
  3237.  asr.l #1,d0
  3238.  move.l d0,shotxvel(a0)
  3239.  move.l shotzvel(a0),d0
  3240.  asr.l #1,d0
  3241.  move.l d0,shotzvel(a0) 
  3242.  
  3243.  
  3244.  bra .nohitfloor
  3245. .nobounceup: 
  3246.  
  3247.  
  3248.  move.b #0,shotanim(a0)
  3249.  move.b #1,shotstatus(a0)
  3250.  move.l B_ImpactSFX(a6),d0
  3251.  subq.l #1,d0
  3252.  blt.s .nohitnoise2
  3253.  
  3254.  move.l #ObjRotated,a1
  3255.  move.w (a0),d1
  3256.  move.l (a1,d1.w*8),Noisex
  3257.  move.w #200,Noisevol
  3258.  move.w d0,Samplenum
  3259.  move.b d1,IDNUM
  3260.  movem.l d0-d7/a0-a6,-(a7)
  3261.  jsr MakeSomeNoise
  3262.  movem.l (a7)+,d0-d7/a0-a6
  3263. .nohitnoise2:
  3264.  moveq #0,d0
  3265.  move.l B_ExplosiveForce(a6),d0
  3266.  beq.s .noexplosion2
  3267.  
  3268.  move.w 4(a0),Viewery
  3269.  move.w newx,Viewerx
  3270.  move.w newz,Viewerz
  3271.  move.b ObjInTop(a0),ViewerTop
  3272.  movem.l d0-d7/a0-a6,-(a7)
  3273.  bsr ComputeBlast
  3274.  movem.l (a7)+,d0-d7/a0-a6
  3275.  
  3276. .noexplosion2:
  3277. .nohitfloor:
  3278. ******************** 
  3279.  
  3280.  
  3281.  
  3282.  move.l ObjectPoints,a1
  3283.  move.w (a0),d1
  3284.  lea (a1,d1.w*8),a1
  3285.  move.l (a1),d2
  3286.  move.l d2,oldx
  3287.  move.l shotxvel(a0),d3
  3288.  move.w d3,d4
  3289.  swap d3
  3290.  move.w TempFrames,d5
  3291.  muls d5,d3
  3292.  mulu d5,d4
  3293.  swap d3
  3294.  clr.w d3
  3295.  add.l d4,d3
  3296.  add.l d3,d2
  3297.  move.l d2,newx
  3298.  move.l 4(a1),d2
  3299.  move.l d2,oldz
  3300.  move.l shotzvel(a0),d3
  3301.  move.w d3,d4
  3302.  swap d3
  3303.  muls d5,d3
  3304.  mulu d5,d4
  3305.  swap d3
  3306.  clr.w d3
  3307.  add.l d4,d3
  3308.  add.l d3,d2
  3309.  move.l d2,newz
  3310.  move.l accypos(a0),oldy 
  3311.  
  3312.  move.w shotyvel(a0),d3
  3313.  muls TempFrames,d3
  3314.  move.l B_Gravity(a6),d5
  3315.  beq.s nograv
  3316.  muls TempFrames,d5
  3317.  add.l d5,d3
  3318.  move.w shotyvel(a0),d6
  3319.  ext.l d6
  3320.  add.l d5,d6
  3321.  cmp.l #10*256,d6
  3322.  blt.s okgrav
  3323.  move.l #10*256,d6
  3324.  okgrav:
  3325.  move.w d6,shotyvel(a0)
  3326. nograv:
  3327.  move.l accypos(a0),d4 
  3328.  add.l d3,d4
  3329.  
  3330.  move.l d4,accypos(a0)
  3331.  sub.l #5*128,d4
  3332.  move.l d4,newy
  3333.  add.l #5*128,d4
  3334.  asr.l #7,d4
  3335.  move.w d4,4(a0)
  3336.  tst.l B_BounceOffWalls(a6)
  3337.  sne.s wallbounce
  3338.  seq.s exitfirst
  3339.  
  3340.  clr.b hitwall
  3341.  move.b ObjInTop(a0),StoodInTop
  3342.  move.w #%0000010000000000,wallflags
  3343.  move.l #0,StepUpVal
  3344.  move.l #$1000000,StepDownVal
  3345.  move.l #10*128,thingheight
  3346.  move.w oldx,d0
  3347.  cmp.w newx,d0
  3348.  bne.s lalal
  3349.  move.w oldz,d0
  3350.  cmp.w newz,d0
  3351.  beq.s nomovebul
  3352.  move.w #1,walllength
  3353.  
  3354. lalal:
  3355.  movem.l d0/d7/a0/a1/a2/a4/a5/a6,-(a7)
  3356.  jsr MoveObject
  3357.  
  3358.  moveq #0,d0
  3359.  move.b BRIGHTNESS,d0
  3360.  beq.s .nobright
  3361.  neg.w d0
  3362.  move.w newx,d1
  3363.  move.w newz,d2
  3364.  move.l newy,BRIGHTY
  3365.  move.l objroom,a0
  3366.  move.w (a0),d3
  3367.  jsr BRIGHTENPOINTS
  3368.  
  3369. .nobright:
  3370.  
  3371.  movem.l (a7)+,d0/d7/a0/a1/a2/a4/a5/a6
  3372. nomovebul:
  3373.  move.b StoodInTop,ObjInTop(a0)
  3374.   
  3375.  tst.b wallbounce
  3376.  beq.s .notabouncything
  3377.  
  3378.  tst.b hitwall
  3379.  beq .nothitwall
  3380.  
  3381. ; we have hit a wall....
  3382.  
  3383.  move.w shotzvel(a0),d0
  3384.  muls wallxsize,d0
  3385.  move.w shotxvel(a0),d1
  3386.  muls wallzsize,d1
  3387.  sub.l d1,d0
  3388.  divs walllength,d0
  3389.  
  3390.  move.w shotxvel(a0),d1
  3391.  move.w wallzsize,d2
  3392.  add.w d2,d2
  3393.  muls d0,d2
  3394.  divs walllength,d2
  3395.  add.w d2,d1
  3396.  move.w d1,shotxvel(a0)
  3397.  
  3398.  move.w shotzvel(a0),d1
  3399.  move.w wallxsize,d2
  3400.  add.w d2,d2
  3401.  muls d0,d2
  3402.  divs walllength,d2
  3403.  sub.w d2,d1
  3404.  move.w d1,shotzvel(a0)
  3405.  
  3406. ; btst #1,shotflags+1(a0)
  3407. ; beq .nothitwall
  3408.  
  3409.  move.l shotxvel(a0),d0
  3410.  asr.l #1,d0
  3411.  move.l d0,shotxvel(a0)
  3412.  move.l shotzvel(a0),d0
  3413.  asr.l #1,d0
  3414.  move.l d0,shotzvel(a0) 
  3415.   
  3416.  
  3417.  bra .nothitwall
  3418.  
  3419. .notabouncything:
  3420.   
  3421.  tst.b hitwall
  3422.  beq .nothitwall
  3423.  
  3424.  move.l wallhitheight,d4
  3425.  move.l d4,accypos(a0)
  3426.  asr.l #7,d4
  3427.  move.w d4,4(a0)
  3428.  
  3429. .hitsomething
  3430.  clr.b timeout
  3431.  move.b #0,shotanim(a0)
  3432.  move.b #1,shotstatus(a0)
  3433.  
  3434.  move.l B_ImpactSFX(a6),d0
  3435.  subq.l #1,d0
  3436.  blt.s .nohitnoise
  3437.  
  3438.  move.l #ObjRotated,a1
  3439.  move.w (a0),d1
  3440.  move.l (a1,d1.w*8),Noisex
  3441.  move.w #200,Noisevol
  3442.  move.w d0,Samplenum
  3443.  move.b d1,IDNUM
  3444.  movem.l d0-d7/a0-a6,-(a7)
  3445.  jsr MakeSomeNoise
  3446.  movem.l (a7)+,d0-d7/a0-a6
  3447.  
  3448. .nohitnoise:
  3449.  
  3450.  move.l B_ExplosiveForce(a6),d0
  3451.  beq.s .noexplosion
  3452.  
  3453.  move.w newx,Viewerx
  3454.  move.w newz,Viewerz
  3455.  move.w 4(a0),Viewery
  3456.  move.b ObjInTop(a0),ViewerTop
  3457.  movem.l d0-d7/a0-a6,-(a7)
  3458.  bsr ComputeBlast
  3459.  movem.l (a7)+,d0-d7/a0-a6
  3460.  
  3461. .noexplosion:
  3462.  
  3463.  
  3464. ; bra doneshot
  3465.  
  3466. ; rts
  3467.  
  3468. .nothitwall:
  3469.  
  3470.  tst.b timeout
  3471.  bne .hitsomething
  3472.  
  3473. lab:
  3474.  
  3475.  
  3476.  move.l objroom,a3
  3477.  move.w (a3),12(a0)
  3478.  move.w (a3),GraphicRoom(a0)
  3479.  move.l newx,(a1)
  3480.  move.l newz,4(a1)
  3481. ************ 
  3482. * Check if hit a nasty
  3483.  
  3484.  tst.l EnemyFlags(a0)
  3485.  bne.s notasplut
  3486.  rts
  3487. notasplut:
  3488.  
  3489.  
  3490.  move.l ObjectData,a3
  3491.  move.l ObjectPoints,a1
  3492.  move.w newx,d2
  3493.  sub.w oldx,d2
  3494.  move.w d2,xdiff
  3495.  move.w newz,d1
  3496.  sub.w oldz,d1
  3497.  move.w d1,zdiff
  3498.  move.w d1,d3
  3499.  move.w d2,d4
  3500.  muls d2,d2
  3501.  muls d1,d1
  3502.  move.l #1,d0
  3503.  add.l d1,d2
  3504.  beq .oksqr
  3505.  
  3506.  move.w #31,d0
  3507. .findhigh
  3508.  btst d0,d2
  3509.  bne .foundhigh
  3510.  dbra d0,.findhigh
  3511. .foundhigh
  3512.  asr.w #1,d0
  3513.  clr.l d3
  3514.  bset d0,d3
  3515.  move.l d3,d0
  3516.  
  3517.  move.w d0,d1
  3518.  muls d1,d1    ; x*x
  3519.  sub.l d2,d1    ; x*x-a
  3520.  asr.l #1,d1    ; (x*x-a)/2
  3521.  divs d0,d1    ; (x*x-a)/2x
  3522.  sub.w d1,d0    ; second approx
  3523.  bgt .stillnot0
  3524.  move.w #1,d0
  3525. .stillnot0
  3526.  
  3527.  move.w d0,d1
  3528.  muls d1,d1
  3529.  sub.l d2,d1
  3530.  asr.l #1,d1
  3531.  divs d0,d1
  3532.  sub.w d1,d0    ; second approx
  3533.  bgt .stillnot02
  3534.  move.w #1,d0
  3535. .stillnot02
  3536.  
  3537.  move.w d0,d1
  3538.  muls d1,d1
  3539.  sub.l d2,d1
  3540.  asr.l #1,d1
  3541.  divs d0,d1
  3542.  sub.w d1,d0    ; second approx
  3543.  bgt .stillnot03
  3544.  move.w #1,d0
  3545. .stillnot03
  3546.  
  3547. .oksqr
  3548.  move.w d0,Range
  3549.  add.w #80,d0
  3550.  muls d0,d0
  3551.  move.l d0,sqrnum
  3552.  
  3553. .checkloop:
  3554.  tst.w (a3)
  3555.  blt .checkedall
  3556.  tst.w 12(a3)
  3557.  blt .notanasty
  3558.  moveq #0,d1
  3559.  move.b 16(a3),d1
  3560.  
  3561.  move.l EnemyFlags(a0),d7
  3562.  btst d1,d7
  3563.  beq .notanasty
  3564.  
  3565.  cmp.b #1,d1
  3566.  bne.s .notanobj
  3567.  
  3568.  move.l LINKFILE,a4
  3569.  add.l #ObjectStats,a4
  3570.  move.b TypeOfThing(a3),d1
  3571.  muls #ObjectStatLen,d1
  3572.  cmp.w #2,O_Behaviour(a4,d1.w)
  3573.  bne .notanasty
  3574.  
  3575. .notanobj:
  3576.  
  3577.  tst.b numlives(a3)
  3578.  beq .notanasty
  3579.  
  3580. ; move.l #ColBoxTable,a6
  3581. ; lea (a6,d1.w*8),a6
  3582.  
  3583.  move.w 4(a3),d1
  3584.  move.w 4(a0),d2
  3585.  sub.w d1,d2
  3586.  bge .okh
  3587.  neg.w d2
  3588. .okh:
  3589.  
  3590. ; cmp.w 2(a6),d2
  3591.  
  3592.  cmp.w #50,d2
  3593.  bgt .notanasty
  3594.  
  3595.  move.w (a3),d1
  3596.  move.w (a1,d1.w*8),d2
  3597.  move.w d2,d4
  3598.  move.w 4(a1,d1.w*8),d3
  3599.  move.w d3,d5
  3600.  sub.w newx,d4
  3601.  sub.w oldx,d2
  3602.  move.w d2,d6
  3603.  sub.w newz,d5
  3604.  sub.w oldz,d3
  3605.  move.w d3,d7
  3606.  muls zdiff,d6
  3607.  muls xdiff,d7
  3608.  sub.l d7,d6
  3609.  bgt.s .pos
  3610.  neg.l d6
  3611. .pos:
  3612.  divs Range,d6
  3613.  
  3614.  move.w #80,d7
  3615.  cmp.b #1,16(a3)
  3616.  ble.s .okbig
  3617.  
  3618.  move.w #40,d7
  3619.  
  3620. .okbig:
  3621.  
  3622.  cmp.w d7,d6
  3623. ; cmp.w (a6),d6
  3624.  bgt .stillgoing
  3625.  
  3626.  muls d2,d2
  3627.  muls d3,d3
  3628.  add.l d3,d2
  3629.  cmp.l sqrnum,d2
  3630.  bgt .stillgoing
  3631.  muls d4,d4
  3632.  muls d5,d5
  3633.  add.l d5,d4
  3634.  cmp.l sqrnum,d4
  3635.  bgt .stillgoing
  3636.  
  3637.  move.b shotpower(a0),d6
  3638.  add.b d6,damagetaken(a3)
  3639.  move.w shotxvel(a0),ImpactX(a3)
  3640.  move.w shotzvel(a0),ImpactZ(a3)
  3641.  move.b #0,shotanim(a0)
  3642.  move.b #1,shotstatus(a0)
  3643.  
  3644.  move.l B_ImpactSFX(a6),d0
  3645.  subq.l #1,d0
  3646.  blt.s .nohitnoise3
  3647.  
  3648.  move.l #ObjRotated,a1
  3649.  move.w (a0),d1
  3650.  move.l (a1,d1.w*8),Noisex
  3651.  move.w #200,Noisevol
  3652.  move.w d0,Samplenum
  3653.  move.b d1,IDNUM
  3654.  movem.l d0-d7/a0-a6,-(a7)
  3655.  jsr MakeSomeNoise
  3656.  movem.l (a7)+,d0-d7/a0-a6
  3657. .nohitnoise3:
  3658.  move.l B_ExplosiveForce(a6),d0
  3659.  beq.s .noexplosion3
  3660.  
  3661.  move.w 4(a0),Viewery
  3662.  move.w newx,Viewerx
  3663.  move.w newz,Viewerz
  3664.  movem.l d0-d7/a0-a6,-(a7)
  3665.  bsr ComputeBlast
  3666.  movem.l (a7)+,d0-d7/a0-a6
  3667.  
  3668. .noexplosion3:
  3669.  
  3670.  
  3671.  bra .hitnasty
  3672. .stillgoing:
  3673. .notanasty:
  3674.  add.w #64,a3
  3675.  bra .checkloop
  3676. .hitnasty:
  3677. .checkedall
  3678.  
  3679. doneshot:
  3680.  
  3681.  rts
  3682.  
  3683. tmpnewx: dc.l 0
  3684. tmpnewz: dc.l 0
  3685. hithit: dc.l 0
  3686. sqrnum: dc.l 0
  3687. tmpangpos: dc.l 0
  3688. allbars: dc.l 0
  3689. backrout: ds.b 800
  3690. NUMTOCHECK: dc.w 0 
  3691.  
  3692. MAKEBACKROUT:
  3693. ; move.l #backrout+256,d0
  3694. ; clr.b d0
  3695. ; move.l d0,allbars
  3696. ; move.l d0,a1
  3697. ; move.l #fromback,a0
  3698. ; move.w #400,d0
  3699. ;putinback:
  3700. ; move.b (a0)+,(a1)+
  3701. ; dbra d0,putinback
  3702.  rts
  3703.  
  3704. **************************************** 
  3705.  ifeq CHEESEY
  3706.  
  3707. putinbackdrop:
  3708.  
  3709.  move.l a0,-(a7)
  3710.  
  3711.  move.w tmpangpos,d5
  3712.  and.w #4095,d5
  3713.  muls #648,d5
  3714.  divs #4096,d5
  3715.  muls #240,d5
  3716.  
  3717. ; CACHE_ON d1
  3718.  
  3719.  tst.b FULLSCR
  3720.  bne BIGBACK
  3721.  
  3722.  
  3723.  move.l FASTBUFFER,a0
  3724.  move.l #EndBackPicture,a3
  3725.  move.l #BackPicture+240,a5
  3726.  lea.l BackPicture,a1
  3727.  add.l d5,a1
  3728.  add.w #240,a1
  3729.  
  3730.  move.w MIDDLEY,d7
  3731.  
  3732.  move.w d7,d6
  3733.  move.w d6,d5
  3734.  asr.w #1,d5
  3735.  add.w d5,d6
  3736.  sub.w d6,a1
  3737.  sub.w d6,a5 
  3738.  
  3739.  asr.w #2,d7
  3740.  
  3741.  move.w #240,d1
  3742.  move.w #240,d2
  3743.  move.w #480,d5
  3744.  move.w #191,d4
  3745.  
  3746. horline:
  3747.  move.w d7,d3
  3748.  move.l a0,a2
  3749.  move.l a1,a4
  3750. vertline:
  3751.  move.w (a4)+,d0
  3752.  move.b d0,(a2)
  3753.  move.b (a4)+,d0
  3754.  move.b d0,320(a2)
  3755.  addq #1,a4
  3756.  move.b (a4)+,d0
  3757.  move.b d0,320*2(a2)
  3758.  move.b (a4)+,d0
  3759.  move.b d0,320*3(a2)
  3760.  
  3761.  adda.w #320*4,a2
  3762.  dbra d3,vertline
  3763.  
  3764.  add.w d1,a1
  3765.  cmp.l a1,a3
  3766.  bgt.s .noend
  3767.  move.l a5,a1
  3768. .noend
  3769.  
  3770.  exg d1,d2
  3771.  exg d2,d5
  3772.  
  3773.  addq.w #1,a0
  3774.  
  3775.  dbra d4,horline
  3776.  
  3777.  move.l (a7)+,a0
  3778.  rts
  3779.  
  3780.  
  3781. BIGBACK:
  3782.  
  3783.  
  3784.  move.l FASTBUFFER,a0
  3785.  move.l #EndBackPicture,a3
  3786.  move.l #BackPicture+240,a5
  3787.  lea.l BackPicture,a1
  3788.  add.l d5,a1
  3789.  add.w #240,a1
  3790.  
  3791.  move.w MIDDLEY,d7
  3792.  
  3793.  move.w d7,d6
  3794.  sub.w d6,a1
  3795.  sub.w d6,a5 
  3796.  
  3797.  asr.w #2,d7
  3798.  move.w #287,d4
  3799.  
  3800.  
  3801. .horline:
  3802.  move.w d7,d3
  3803.  move.l a0,a2
  3804.  move.l a1,a4
  3805. .vertline:
  3806.  move.l (a4)+,d0
  3807.  move.b d0,320*3(a2)
  3808.  swap d0
  3809.  move.b d0,320(a2)
  3810.  lsr.l #8,d0
  3811.  move.b d0,(a2)
  3812.  swap d0
  3813.  move.b d0,320*2(a2)
  3814.  
  3815.  adda.w #320*4,a2
  3816.  dbra d3,.vertline
  3817.  
  3818.  add.w #240,a1
  3819.  cmp.l a1,a3
  3820.  bgt.s .noend
  3821.  move.l a5,a1
  3822. .noend
  3823.  
  3824.  addq.w #1,a0
  3825.  
  3826.  dbra d4,.horline
  3827.  
  3828.  move.l (a7)+,a0
  3829.  rts
  3830. ****************************************
  3831.  endc
  3832.  
  3833.  ifne CHEESEY 
  3834.  
  3835. putinbackdrop:
  3836.  
  3837.  move.l a0,-(a7)
  3838.  
  3839.  move.w tmpangpos,d5
  3840.  and.w #4095,d5
  3841.  muls #648,d5
  3842.  divs #4096,d5
  3843.  
  3844. ;xoffset of backdrop
  3845.  
  3846. ; CACHE_ON d1
  3847.  
  3848.  tst.b FULLSCR
  3849.  bne BIGBACK
  3850.  
  3851.  
  3852.  move.l FASTBUFFER,a0
  3853.  add.l d5,a1
  3854.  add.w #240,a1
  3855.  
  3856.  move.w MIDDLEY,d7
  3857.  
  3858.  move.w d7,d6
  3859.  move.w d6,d5
  3860.  asr.w #1,d5
  3861.  add.w d5,d6
  3862.  sub.w d6,a1
  3863.  sub.w d6,a5 
  3864.  
  3865.  asr.w #2,d7
  3866.  
  3867.  move.w #240,d1
  3868.  move.w #240,d2
  3869.  move.w #480,d5
  3870.  move.w #(192/8)-1,d4
  3871.  
  3872.  moveq #0,d0
  3873.  
  3874. horline:
  3875.  move.w d7,d3
  3876.  move.l a0,a2
  3877.  move.l a1,a4
  3878. vertline:
  3879.  move.l d0,(a2)
  3880.  move.l d0,320(a2)
  3881.  move.l d0,320*2(a2)
  3882.  move.l d0,320*3(a2)
  3883.  move.l d0,4(a2)
  3884.  move.l d0,4+320(a2)
  3885.  move.l d0,4+(320*2)(a2)
  3886.  move.l d0,4+(320*3)(a2)
  3887.  adda.w #320*4,a2
  3888.  dbra d3,vertline
  3889.  
  3890.  addq.w #8,a0
  3891.  
  3892.  dbra d4,horline
  3893.  
  3894.  move.l (a7)+,a0
  3895.  rts
  3896.  
  3897.  
  3898. BIGBACK:
  3899.  
  3900.  
  3901.  move.l FASTBUFFER,a0
  3902.  add.l d5,a1
  3903.  add.w #240,a1
  3904.  
  3905.  move.w MIDDLEY,d7
  3906.  
  3907.  move.w d7,d6
  3908.  sub.w d6,a1
  3909.  sub.w d6,a5 
  3910.  
  3911.  asr.w #2,d7
  3912.  move.w #(288/8)-1,d4
  3913.  move.l #0,d0
  3914.  
  3915. .horline:
  3916.  move.w d7,d3
  3917.  move.l a0,a2
  3918.  move.l a1,a4
  3919. .vertline:
  3920.  
  3921.  move.l d0,320*0(a2)
  3922.  move.l d0,320*1(a2)
  3923.  move.l d0,320*2(a2)
  3924.  move.l d0,320*3(a2)
  3925.  move.l d0,4+320*0(a2)
  3926.  move.l d0,4+320*1(a2)
  3927.  move.l d0,4+320*2(a2)
  3928.  move.l d0,4+320*3(a2)
  3929.  
  3930.  
  3931.  adda.w #320*4,a2
  3932.  dbra d3,.vertline
  3933.  
  3934.  addq #8,a0
  3935.  
  3936.  dbra d4,.horline
  3937.  
  3938.  move.l (a7)+,a0
  3939.  rts
  3940.  
  3941.  endc
  3942.  
  3943. MaxDamage: dc.w 0
  3944.  
  3945. ComputeBlast:
  3946.  
  3947.  clr.w doneflames
  3948.  
  3949.  move.w d0,d6
  3950.  move.w d0,MaxDamage
  3951.  
  3952.  move.w d0,d1
  3953.  ext.l d6
  3954.  neg.w d1
  3955.  move.w 12(a0),d0
  3956. ; jsr Flash
  3957.  
  3958.  move.l ZoneAdds,a2
  3959.  move.l (a2,d0.w*4),a2
  3960.  add.l LEVELDATA,a2
  3961.  move.l a2,MiddleRoom
  3962.  
  3963.  move.l ObjectData,a2
  3964.  suba.w #64,a2
  3965.  
  3966.  ext.l d6
  3967.  
  3968.  move.l a0,-(a7)
  3969.  
  3970. HitObjLoop:
  3971.  move.l MiddleRoom,FromRoom
  3972.  add.w #64,a2
  3973.  move.w (a2),d0
  3974.  blt CheckedEmAll
  3975.  tst.w 12(a2)
  3976.  blt.s HitObjLoop
  3977.  moveq #0,d1
  3978.  move.b 16(a2),d1
  3979. ; move.l #%1111111111110111110011,d7    ; possible targets
  3980. ; btst d1,d7
  3981. ; beq.s HitObjLoop
  3982.  
  3983.  move.w 12(a2),d1
  3984.  move.l ZoneAdds,a3
  3985.  move.l (a3,d1.w*4),a3
  3986.  add.l LEVELDATA,a3
  3987.  move.l a3,ToRoom
  3988.  move.l ObjectPoints,a3
  3989.  move.w (a3,d0.w*8),Targetx
  3990.  move.w 4(a3,d0.w*8),Targetz
  3991.  move.w 4(a2),Targety
  3992.  move.b ObjInTop(a2),TargetTop
  3993.  jsr CanItBeSeen
  3994.  tst.b CanSee
  3995.  beq HitObjLoop
  3996.  
  3997.  move.w Targetx,d0
  3998.  sub.w Viewerx,d0
  3999.  move.w d0,d2
  4000.  move.w Targetz,d1
  4001.  sub.w Viewerz,d1
  4002.  move.w d1,d3
  4003.  muls d2,d2
  4004.  muls d3,d3
  4005.  move.w #1,d4
  4006.  add.l d3,d2 
  4007.  beq .oksqr
  4008.  move.w #31,d4
  4009. .findhigh
  4010.  btst d4,d2
  4011.  dbne d4,.findhigh
  4012. .foundhigh
  4013.  asr.w #1,d4
  4014.  clr.l d3
  4015.  bset d4,d3
  4016.  move.l d3,d4
  4017.  
  4018.  move.w d4,d3
  4019.  muls d3,d3    ; x*x
  4020.  sub.l d2,d3    ; x*x-a
  4021.  asr.l #1,d3    ; (x*x-a)/2
  4022.  divs d4,d3    ; (x*x-a)/2x
  4023.  sub.w d3,d4    ; second approx
  4024.  bgt .stillnot0
  4025.  move.w #1,d4
  4026. .stillnot0
  4027.  
  4028.  move.w d4,d3
  4029.  muls d1,d3
  4030.  sub.l d2,d3
  4031.  asr.l #1,d3
  4032.  divs d4,d3
  4033.  sub.w d3,d4    ; second approx
  4034.  bgt .stillnot02
  4035.  move.w #1,d4
  4036. .stillnot02
  4037.  
  4038.  move.w d4,d3
  4039.  muls d3,d3
  4040.  sub.l d2,d3
  4041.  asr.l #1,d3
  4042.  divs d4,d3
  4043.  sub.w d3,d4    ; second approx
  4044.  bgt .stillnot03
  4045.  move.w #1,d4
  4046. .stillnot03
  4047.  
  4048. .oksqr
  4049.  
  4050.  move.w d4,d3
  4051.  move.w d3,d7
  4052.  
  4053.  cmp.w #40,d7
  4054.  bge.s .okd
  4055.  move.w #40,d7
  4056. .okd:
  4057.  
  4058.  asr.w #3,d3
  4059.  
  4060.  
  4061.  sub.w #4,d3
  4062.  bge.s OkItsnotzero
  4063.  moveq #0,d3
  4064. OkItsnotzero:
  4065.  
  4066.  cmp.w #64,d3
  4067.  bgt HitObjLoop
  4068.  neg.w d3
  4069.  add.w #64,d3
  4070.  
  4071.  move.w d6,d5
  4072.  muls d3,d5
  4073.  asr.l #5,d5
  4074.  cmp.w MaxDamage,d5
  4075.  blt.s okdamage
  4076.  move.w MaxDamage,d5
  4077. okdamage:
  4078.  add.b d5,damagetaken(a2)
  4079.  ext.l d0
  4080.  ext.l d1
  4081.  muls.l d6,d0
  4082.  muls.l d6,d1
  4083. ; asl.l #2,d0
  4084. ; asl.l #2,d1
  4085.  divs d7,d0
  4086.  divs d7,d1
  4087.  move.w d0,ImpactX(a2)
  4088.  move.w d1,ImpactZ(a2)
  4089.  
  4090.  move.l d6,d1
  4091.  asl.l #4,d1
  4092.  divs d7,d1
  4093.  
  4094.  
  4095. ; move.w 4(a2),d0
  4096. ; sub.w 4(a0),d0    ;dy
  4097. ; bge.s .above
  4098.  neg.w d1
  4099. ;.above
  4100.  cmp.w #-8,d1
  4101.  bge.s .okbl
  4102.  move.w #-8,d1
  4103. .okbl
  4104.  
  4105.  move.w d1,ImpactY(a2)
  4106.  
  4107.  bra HitObjLoop 
  4108.  
  4109. CheckedEmAll:
  4110.  
  4111. ; Now put in the flames!
  4112.  move.l (a7)+,a0
  4113.  
  4114.  move.w (a0),d0
  4115.  move.l ObjectPoints,a2
  4116.  move.w (a2,d0.w*8),d1
  4117.  move.w 4(a2,d0.w*8),d2
  4118.  
  4119.  move.w d1,middlex
  4120.  move.w d2,middlez
  4121.  
  4122.  move.w #9,d7
  4123.  
  4124.  clr.b exitfirst
  4125.  st.b wallbounce
  4126.  move.w 12(a0),d0
  4127.  move.l ZoneAdds,a3
  4128.  move.l (a3,d0.w*4),a3
  4129.  add.l LEVELDATA,a3
  4130.  move.l a3,MiddleRoom
  4131.  
  4132.  move.l PlayerShotData,a3
  4133.  move.w 4(a0),d0
  4134.  ext.l d0
  4135.  asl.l #7,d0
  4136.  move.l d0,oldy
  4137.  
  4138.  moveq #2,d5
  4139.  move.w #19,NUMTOCHECK
  4140.  
  4141.  move.w #2,d6
  4142. radiusloop:
  4143.  move.w #1,d7
  4144.  
  4145. DOFLAMES:
  4146.  
  4147.  move.w NUMTOCHECK,d1
  4148. .findonefree
  4149.  move.w 12(a3),d2
  4150.  blt.s .foundonefree
  4151.  adda.w #64,a3
  4152.  dbra d1,.findonefree
  4153.  rts
  4154. .foundonefree
  4155.  
  4156.  move.b #2,16(a3)
  4157.  
  4158.  move.w d1,NUMTOCHECK
  4159.  
  4160.  add.w #1,doneflames
  4161.  move.w middlex,d1
  4162.  move.w middlez,d2
  4163.  move.w d1,oldx
  4164.  move.w d2,oldz
  4165.  move.b ObjInTop(a0),StoodInTop
  4166.  
  4167.  jsr GetRand
  4168.  ext.w d0
  4169.  muls d5,d0
  4170.  asr.w #1,d0
  4171.  bne.s .xnz
  4172.  moveq #2,d0
  4173. .xnz:
  4174.  add.w d0,d1
  4175.  jsr GetRand
  4176.  ext.w d0
  4177.  muls d5,d0
  4178.  asr.w #1,d0
  4179.  bne.s .znz
  4180.  moveq #2,d0
  4181. .znz: 
  4182.  add.w d0,d2
  4183.  move.l oldy,d3
  4184.  jsr GetRand
  4185.  muls d5,d0
  4186.  asr.l #3,d0
  4187.  add.l d0,d3
  4188.  move.l d3,newy
  4189.  
  4190.  move.w d1,newx
  4191.  move.w d2,newz
  4192.  move.l MiddleRoom,objroom
  4193.  
  4194.  
  4195.  movem.l d5/d6/a0/a1/a3/d7/a6,-(a7)
  4196.  move.w #80,extlen
  4197.  move.b #1,awayfromwall
  4198.  jsr MoveObject
  4199.  movem.l (a7)+,d5/d6/a0/a1/a3/d7/a6
  4200.  
  4201.  move.l objroom,a2
  4202.  move.w (a2),12(a3)
  4203.  
  4204.  move.l newy,d0
  4205.  
  4206.  move.l ToZoneFloor(a2),d1
  4207.  move.l ToZoneRoof(a2),d2
  4208.  tst.b ObjInTop(a0)
  4209.  beq.s .okinbot
  4210.  move.l ToUpperFloor(a2),d1
  4211.  move.l ToUpperRoof(a2),d2
  4212. .okinbot:
  4213.  
  4214.  cmp.l d0,d1
  4215.  bgt.s .abovefloor
  4216.  move.l d1,d0
  4217. .abovefloor: 
  4218.  
  4219.  cmp.l d0,d2
  4220.  blt.s .belowroof
  4221.  move.l d2,d0
  4222. .belowroof:
  4223.  
  4224.  move.l d0,accypos(a3)
  4225.  asr.l #7,d0
  4226.  move.w d0,4(a3)
  4227.  move.b #2,16(a3)
  4228.  move.b #0,shotanim(a3)
  4229. ; sub.b d5,shotanim(a3)
  4230.  st shotstatus(a3)
  4231.  move.b StoodInTop,ObjInTop(a3)
  4232.  move.b BLOODYGREATBOMB,shotsize(a3)
  4233.  st worry(a3)
  4234.  move.w (a3),d0
  4235.  move.l ObjectPoints,a2
  4236.  move.w newx,(a2,d0.w*8)
  4237.  move.w newz,4(a2,d0.w*8)
  4238.  
  4239.  adda.w #64,a3
  4240.  
  4241.  dbra d7,DOFLAMES
  4242.  add.w #2,d5
  4243.  dbra d6,radiusloop
  4244.  
  4245.  rts
  4246.  
  4247. MiddleRoom: dc.l 0
  4248. middlex: dc.w 0
  4249. middlez: dc.w 0
  4250. doneflames: dc.w 0
  4251.  
  4252.